JS自定义多媒体Video控制条(控制视频播放、进度、全屏案例)

太过爱你忘了你带给我的痛 2022-04-23 08:58 1322阅读 0赞

案例参考

先来看一下一些视屏控件
腾讯视屏控件
优酷

需求

  1. 点击按钮实现视频的播放和暂停
  2. 按钮切换全屏和退出全屏功能
  3. 进度条和时间

前期准备

HTML DOM Video 对象文档
图标字体库下载和文档
案例目录
所有目录

HTML代码

  1. 我们自定义实现控制条,所以video不要使用controls属性
  2. 从其他网站视频播放,一般都是要自己实现控制条来达到我们想要的效果,使用video提供的控制条相关属性就很难修改,也可能不搭配网站,不美观
    提供的控制条
  3. html代码

    <!DOCTYPE html>
    <!DOCTYPE html>




    自定义视频控制条





    视频控制案例











    00:00:00/
    00:00:00








CSS代码

  1. *{
  2. margin: 0;
  3. padding: 0;
  4. }
  5. /* 去掉全屏时显示的自带控制条 */
  6. video::-webkit-media-controls{
  7. display:none !important;
  8. }
  9. .wrap h3{
  10. text-align: center;
  11. height: 100px;
  12. line-height: 100px;
  13. }
  14. .player{
  15. width: 720px;
  16. height: 400px;
  17. margin: 0 auto;
  18. position: relative;
  19. }
  20. .player video{
  21. position: absolute;
  22. left: 50%;
  23. transform: translateX(-50%);
  24. height: 100%;
  25. }
  26. .player .control{
  27. position: absolute;
  28. background: rgba(255,255,0,0.3);
  29. width: 680px;
  30. height: 40px;
  31. border-radius: 5px;
  32. left: 50%;
  33. bottom: 10px;
  34. transform: translateX(-50%);
  35. }
  36. .player .control div{
  37. display: inline-block;
  38. line-height: 40px;
  39. margin-left: 10px;
  40. font-size: 18px;
  41. color: #fff;
  42. }
  43. .player .control .play_pause,.player .control .expand{
  44. color: rgb(255,255,0);
  45. }
  46. .player .control div:nth-child(2){
  47. width: 460px;
  48. height: 10px;
  49. background-color: rgba(255,255,255,0.3);
  50. border-radius: 5px;
  51. overflow: hidden;
  52. }
  53. .player .control .progress{
  54. display: block;
  55. width: 10%;
  56. height: 10px;
  57. background: #fff;
  58. }
  59. .player .control .timer{
  60. font-size: 12px;
  61. }
  1. 效果预览
    视频效果

JS代码

实现播放暂停
  1. 属性:paused 设置或返回视频是否暂停。
  2. 方法:play()开始播放视频。pause() :暂停当前播放的视频。
  3. 代码

    // 获取元素
    var videoObj = document.querySelector(‘video’)
    var playBtn = document.querySelector(‘.play_pause’)
    // 0.实现播放按钮
    // 1.获取所需要的元素
    // 2.点击播放按钮控制视频的播放
    // 3.切换为暂停按钮
    // 4.点击暂停按钮实现暂停
    // 5.实现切换
    playBtn.addEventListener(‘click’, function(){

    1. if(videoObj.paused){
    2. // 如果视频处于播放状态
    3. videoObj.play()
    4. this.classList.remove('fa-play')
    5. this.classList.add('fa-pause')
    6. }else{
    7. videoObj.pause()
    8. this.classList.add('fa-play')
    9. this.classList.remove('fa-pause')
    10. }

    })

  4. 效果
    在这里插入图片描述
    效果

实现时间
  1. 属性:currentTime 设置或返回视频中的当前播放位置(以秒计)。duration 返回视频的长度(以秒计)
  2. 方法:oncanplay: 事件在用户可以开始播放视频/音频(audio/video)时触发。 ontimeupdate:通过该事件来报告当前的播放进度.
  3. 代码

    var progressTimer = document.querySelector(‘.progress_timer’)
    var durationTimer = document.querySelector(‘.duration_timer’)
    // 0.实现时间
    // 1.获取所需的元素
    // 2.时间格式为:hh:mm:ss
    // 3.获取总时间,并格式化
    // 4.获取当前视频时间,并格式化
    // 5.渲染到页面
    let { totalT,presentT} = { totalT:0,presentT:0}
    videoObj.addEventListener(‘canplay’,function(){

    1. totalT = this.duration
    2. var videoDuration = formatTime(totalT)
    3. durationTimer.innerHTML = videoDuration

    })

    videoObj.addEventListener(‘timeupdate’,function(){

    1. presentT = this.currentTime
    2. var videoCurrent = formatTime(presentT)
    3. progressTimer.innerHTML = videoCurrent

    })
    function formatTime(t){

    1. var h = parseInt(t/3600)
    2. h = h<10?'0'+h:h
    3. var m = parseInt(t%3600/60)
    4. m = m<10?'0'+m:m
    5. var s = parseInt(t%60)
    6. s = s<10?'0'+s:s
    7. return h+':'+m+':'+s

    }

实现进度条
  1. 在播放进度里面实现

    var progress = document.querySelector(‘.progress’)
    //0.实现进度条
    //1.获取所需元素
    //2.根据时间来实现百分比
    var percent = presentT/totalT*100
    progress.style.width = percent+’%’

实现全屏
  1. 全屏:video.webkitRequestFullScreen();

    // 0.实现全屏
    var expand = document.querySelector(‘.expand’)
    expand.addEventListener(‘click’,function(){

    1. videoObj.webkitRequestFullScreen()

    })

  2. 但是这样会覆盖我们自定义的控制条

  3. 使用提高层级并不能解决
  4. 使用user agent stylesheet来更改也起不了作用
  5. 我们可以使用video存放的容器来实现全屏,然后video根据父元素进行变化即可

    var videoObj = document.querySelector(‘video’)
    var playBtn = document.querySelector(‘.play_pause’)
    var progressTimer = document.querySelector(‘.progress_timer’)
    var durationTimer = document.querySelector(‘.duration_timer’)
    var progress = document.querySelector(‘.progress’)
    var player = document.querySelector(‘.player’)
    var expand = document.querySelector(‘.expand’)
    playBtn.addEventListener(‘click’, function(){

    1. if(videoObj.paused){
    2. // 如果视频处于播放状态
    3. videoObj.play()
    4. this.classList.remove('fa-play')
    5. this.classList.add('fa-pause')
    6. }else{
    7. videoObj.pause()
    8. this.classList.add('fa-play')
    9. this.classList.remove('fa-pause')
    10. }

    })
    let { totalT,presentT} = { totalT:0,presentT:0}
    videoObj.addEventListener(‘canplay’,function(){

    1. totalT = this.duration
    2. var videoDuration = formatTime(totalT)
    3. durationTimer.innerHTML = videoDuration

    })

    videoObj.addEventListener(‘timeupdate’,function(){

    1. presentT = this.currentTime
    2. var videoCurrent = formatTime(presentT)
    3. progressTimer.innerHTML = videoCurrent
    4. var percent = presentT/totalT*100
    5. progress.style.width = percent+'%'

    })

    function formatTime(t){

    1. var h = parseInt(t/3600)
    2. h = h<10?'0'+h:h
    3. var m = parseInt(t%3600/60)
    4. m = m<10?'0'+m:m
    5. var s = parseInt(t%60)
    6. s = s<10?'0'+s:s
    7. return h+':'+m+':'+s

    }

    expand.addEventListener(‘click’,function(){

    1. player.webkitRequestFullScreen()

    })

最终效果图

未完待续

  1. 当视频播放结束后的处理
  2. 可以给视频增加声音,清晰度,快进按钮
  3. 对于全屏时的操作
  4. 点击进度条可以实现进度播放

发表评论

表情:
评论列表 (有 0 条评论,1322人围观)

还没有评论,来说两句吧...

相关阅读