继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【金秋打卡】第23天 进度条的实现

stb烙饼
关注TA
已关注
手记 84
粉丝 2
获赞 4

课程章节:第5章 弹出层中的Video播放器组件开发 5.7

课程讲师:西门老舅

课程内容:

今天学习的内容是播放进度的联动,随着视频播放进度条自动更新进度。

playing 方法中,通过 video.currentTime 可以获取最新的进度,除以 video.duration 就能计算出此时播放进度的比例,然后动态修改进度条的width 即可。

同时通过 video.buffered.end(0) 可以获取视频缓存节点的时间,它永远大于 currentTime,可以用它来计算缓存的进度。

首先在 css 中,将进度条有关的 width 样式全部重置为 0:

.video-progress-now {
  width: 0;
}

.video-progress-suc {
  width: 0;
}

然后通过相关 API 去动态设置进度:

handle() {
    // 进度条位置
    let currentProcess = this.tempContainer.querySelector('.video-progress-now') as HTMLElement
    let sucProcess = this.tempContainer.querySelector('.video-progress-suc') as HTMLElement
    let barProcess = this.tempContainer.querySelector('.video-progress-bar') as HTMLElement


    function playing () {
      // 展示当前时长
      (startTimeElm as HTMLElement).innerHTML = formateTime(videoElm.currentTime as number)

      // 计算位置比例
      let scale = videoElm.currentTime / videoElm.duration
      let sucScale = videoElm.buffered.end(0) / videoElm.duration

      currentProcess.style.width = scale * 100 + '%'
      barProcess.style.width = scale * 100 + '%'
      sucProcess.style.width = sucScale * 100 + '%'
    } 
}

课程收获

这节课实现了播放器组件的进度条相关功能,主要借助 video 元素的 currentTime,duration 和 buffered 这三个属性。在此基础上还可以进行完善,实现拖拽滑块更新进度,点击进度条更新进度的功能。

图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP