JavaScript 30 Day -- 10 自定义视频播放器

实现效果:

可以控制视频的播放速度和音量大小,可以快进/快退。

关键点:

为 video 元素添加自定义样式的播放控制面板
    可滑动调节音量、播放速度
    可通过按钮快进、回退
    可点击视频画面或按钮播放或暂停视频播放
    可点击或拖动进度条选择视频播放进度、
video 对象的各种属性、方法和事件
    paused  //检查视频是否已暂停
    play() //播放
    pause()  //暂停
    currentTime  //音频/视频播放的当前位置

javascript

var player = document.querySelector('.player');
var video = document.querySelector('.viewer');
var progress = document.querySelector('.progress');
var progressBar = document.querySelector('.progress__filled');
var toggle = document.querySelector('.toggle');
var skipButtons = document.querySelectorAll('[data-skip]');
var ranges = document.querySelectorAll('.player__slider');

// console.log(video);
// console.log(video.paused);

//控制暂停和播放
function togglePlay(){
    //方法一
    var method = video.paused ? 'play' : "pause";
    video[method]();    
    //方法二
    // if(video.paused){
    //  video.play();
    // }else{
    //  video.pause();
    // }
}
//控制暂停和播放的icon
function updataButton(){
    toggle.innerHTML = video.paused ? '►' : '❚ ❚';
    // toggle.textContent = video.paused ? '►' : '❚ ❚';
}
//快进/快退
function skip(){
    // console.log(this.dataset.skip);
    video.currentTime += parseFloat(this.dataset.skip);
}
//控制进度条
function scrub(e){
    var scrubTime = (e.offsetX / progress.offsetWidth) * video.duration;
    // console.log(video.duration + '---------1');
    // console.log(progress.offsetWidth + '--------2');
    // console.log(scrubTime + '------------3');
    // console.log(e.offsetX + '------4');
    // console.log((e.offsetX / progress.offsetWidth));
    video.currentTime = scrubTime;
}
//控制播放速度
function handleRangeUpdate(){
    // console.log(this.value);
    // setProperty(this.name,this.value);
    video[this.name] = this.value;
}
//控制播放的进度
function handleProgress(){
    var perent = (video.currentTime / video.duration) * 100;
    progressBar.style.flexBasis = `${perent}%`;
}

video.addEventListener('click',togglePlay);

progress.addEventListener('click',scrub);

video.addEventListener('play',updataButton);
video.addEventListener('pause',updataButton);

video.addEventListener('timeupdate',handleProgress);

toggle.addEventListener('click',togglePlay);

skipButtons.forEach(button => button.addEventListener('click',skip));

ranges.forEach(button => button.addEventListener("change",handleRangeUpdate));
ranges.forEach(button => button.addEventListener("mousemove",handleRangeUpdate));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值