本文摘自PHP中文网,作者php中世界最好的语言,侵删。
这次给大家带来自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器的注意事项有哪些,下面就是实战案例,一起来看一下。本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。其中实现了播放暂停、进度拖拽、音量控制及全屏等功能。
效果预览

点我查看 源码仓库 。
核心思路
我相信一定会有些没有接触过制作自定义播放器的童鞋对于 标签的认识会停留在此。
1 2 3 | <video controls= "controls" autoplay= "autoplay" >
<source src= "movie.ogg" type= "video/ogg" />
</video>
|
其中controls属性经过设定,会在界面中显示一个浏览器自带的控制条。如果对于UI没有要求的需求,其内置控制器已经可以满足大部分的需求。当然了如果是这样你们也不会看到这篇分享了=。=
隐藏控制条并模拟
那么实现一个自定义功能的播放器关键就在于,我们不使用原生的控制器,将其隐藏掉之后,在下方同样的位置通过html、css来模拟所需样式,同时通过js来调用vedio标签所暴露给我们的接口函数及属性,以及检测用户的操作行为来同步的模拟UI与视频播放数据的相应变化。
几个核心函数及属性的用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | myVid=document.getElementById( "video1" );
myVid.play()
myVid.pause()
myVid.currentTime=5;
myVid.duration
myVid.volume
myVid.readyState
|
在所有实现中的关键点,较为繁琐的是对于进度条的模拟。其中使用了video标签中的currentTime以及duration属性,通过当前播放时间与总播放时间的比值,就可以计算出进度条相对于总长的位置。同时用户通过拖拽进度条所最后设置的长度也可以用来反向推算出此时视频应该播放的位置。
拖拽代码思路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | var dragDis = 0
var processWidth = xxx
$( 'body' ).mousedown( function (e) {
startX = e.clientX
dragDis = startX - 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
})
|
同理音量的控制与其上行为基本一致,故在源码中作者将音量与进度部分通过不同元素进行判断是进行进度还是音量的拖拽控制。
通过查询视频流状态控制播放前的加载动画
1 2 3 4 5 6 7 8 9 10 11 12 | function ifState() {
var state = videoSource.readyState
if (state === 4) {
videoPlayer()
} else {
$( '.play-sym-wrapper' ).remove()
$( 'body' ).append( '<p class="play-sym-wrapper"><img class="play-sym" src="./images/loading.gif"></p>' )
setTimeout(ifState, 10)
}
}
setTimeout(ifState, 10)
|
核心的控制部分已经说完了,有兴趣的同学可以去源码的html中点击播放,其中被迫有很多零碎的需求,比如点击暂停,保存音量等等。整个视频播放器的基础功能实现的还算完善。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
H5中的video标签无法播放mp4文件如何解决
html5新增加的标签有哪些
以上就是自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
HTML5实践-使用css装饰图片画廊的代码分享(二)
HTML5 manifest离线缓存的示例代码
h5中app监听返回事件处理
使用HTML5捕捉音频与视频信息概述及实例
css3如何实现元素环绕中心点布局(代码示例)
HTML5中<template>标签的详细介绍(图文)
jquery实现带弹窗和次数的转盘抽奖(代码)
HTML5中返回音频/视频是否已暂停的属性paused
HTML5中关于canvas画图之画圆形的实例介绍
h5表单验证失败该怎样提示
更多相关阅读请进入《HTML5》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器