最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器

来源:动视网 责编:小采 时间:2020-11-27 15:05:55
文档

自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器

自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器:这次给大家带来自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器的注意事项有哪些,下面就是实战案例,一起来看一下。本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。
推荐度:
导读自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器:这次给大家带来自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器的注意事项有哪些,下面就是实战案例,一起来看一下。本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。
 这次给大家带来自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器的注意事项有哪些,下面就是实战案例,一起来看一下。

本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。其中实现了播放暂停、进度拖拽、音量控制及全屏等功能。

效果预览

点我查看 源码仓库 。

核心思路

我相信一定会有些没有接触过制作自定义播放器的童鞋对于 标签的认识会停留在此。

<video controls="controls" autoplay="autoplay">
 <source src="movie.ogg" type="video/ogg" />
</video>

其中controls属性经过设定,会在界面中显示一个浏览器自带的控制条。如果对于UI没有要求的需求,其内置控制器已经可以满足大部分的需求。当然了如果是这样你们也不会看到这篇分享了=。=

隐藏控制条并模拟

那么实现一个自定义功能的播放器关键就在于,我们不使用原生的控制器,将其隐藏掉之后,在下方同样的位置通过html、css来模拟所需样式,同时通过js来调用vedio标签所暴露给我们的接口函数及属性,以及检测用户的操作行为来同步的模拟UI与视频播放数据的相应变化。

几个核心函数及属性的用法

myVid=document.getElementById("video1");
//控制视频开关
myVid.play() //播放
myVid.pause() //暂停
//模拟视频进度条
myVid.currentTime=5; //返回或设定当前视频播放位置
myVid.duration // 返回视频总长度
//模拟视频音量
myVid.volume //音量
//获取视频当前状态后判断何时从loading切换为播放
myVid.readyState
//0 = HAVE_NOTHING - 没有关于音频/视频是否就绪的信息
//1 = HAVE_METADATA - 关于音频/视频就绪的元数据
//2 = HAVE_CURRENT_DATA - 关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒
//3 = HAVE_FUTURE_DATA - 当前及至少下一帧的数据是可用的
//4 = HAVE_ENOUGH_DATA - 可用数据足以开始播放

在所有实现中的关键点,较为繁琐的是对于进度条的模拟。其中使用了video标签中的currentTime以及duration属性,通过当前播放时间与总播放时间的比值,就可以计算出进度条相对于总长的位置。同时用户通过拖拽进度条所最后设置的长度也可以用来反向推算出此时视频应该播放的位置。

拖拽代码思路

//核心代码示例
var dragDis = 0
var processWidth = xxx //拖拽条总长
$('body').mousedown(function(e) {
 startX = e.clientX
 dragDis = startX - leftInit //leftInit为拖拽条起始点巨屏幕左侧的距离
 dragTarget.css({ //拖拽按钮
 left: dragDis
 })
 dragProcess.css({ //进度条(蓝色进度条)
 width: dragDis
 }) // 令进度条和拖拽按钮渲染在同一位置
 videoSource.pause()
}).mousemove(function(e) {
 moveX = e.clientX
 disX = moveX - startX
 var left = dragDis + disX
 if(left > processWidth) {
 left = processWidth
 } else if(left < 0) {
 left = 0
 }
 dragTarget.css({
 left: left
 })
 dragProcess.css({
 width: left
 })
}).mouseup(function(e) {
 videoSource.play()
 videoSource.currentTime = $('蓝色拖拽条').width() / processWidth * duration //拖拽后计算视频的正确播放位置
})

同理音量的控制与其上行为基本一致,故在源码中作者将音量与进度部分通过不同元素进行判断是进行进度还是音量的拖拽控制。

通过查询视频流状态控制播放前的加载动画

function ifState() {
 var state = videoSource.readyState
 if(state === 4) { //状态为4即可播放
 videoPlayer()
 } else {
 $('.play-sym-wrapper').remove()
 $('body').append('<p class="play-sym-wrapper"><img class="play-sym" src="./images/loading.gif"></p>')
 //添加loading动画
 setTimeout(ifState, 10)
 }
}
setTimeout(ifState, 10)

核心的控制部分已经说完了,有兴趣的同学可以去源码的html中点击播放,其中被迫有很多零碎的需求,比如点击暂停,保存音量等等。整个视频播放器的基础功能实现的还算完善。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

H5中的video标签无法播放mp4文件如何解决

html5新增加的标签有哪些

文档

自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器

自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器:这次给大家带来自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器的注意事项有哪些,下面就是实战案例,一起来看一下。本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。
推荐度:
标签: 自定义 播放器 h5
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top