课程名称:TypeScript封装播放器组件
课程章节:第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 这三个属性。在此基础上还可以进行完善,实现拖拽滑块更新进度,点击进度条更新进度的功能。