HTML5自定义视频播放器源码
video对象
兼容性写法
video controls> source src="data/demo.ovg"> source src="data/demo.mp4"> source src="data/demo.webm"> 您的浏览器不支持,请升级您的浏览器 /video>
video 标签 width height autoplay muted
poster带有预览图(海报图片)的视频播放器
video src='data/demo.mp4' muted controls autoplay height='400' width="200" poster='data/poster.jpg'> /video>
选中video标签
VAR VideoNode = document.getElementById('myVideo');
src控制视频的来源
VideoNode.src = 'data/demo.ogv';
手动设置控件 controls
VideoNode.controls = true;
设置视频音量
VideoNode.volume = 0.5;
currentTime当前播放时间
快进效果
gogogo.onclick = function(){ VideoNode.currentTime = VideoNode.currentTime + 3; } ;
暂停 pause()
stopNode.onclick = function(){ VideoNode.pause(); } ;
播放play()
playNode.onclick = function(){ VideoNode.play(); } ;
load 刷新播放器的事件
reloadNode.onclick = function(){ VideoNode.src = 'data/demo.mp4'; VideoNode.load(); } ;
canplay 视频已经加载好 可以开始播放了
VideoNode.addEventListener('canplay',function(){ console.LOG('视频已经加载好 可以开始播放了'); } );
requestFullscreen 让video标签变成全屏
VideoNode.webkitRequestFullscreen(); VideoNode.mozRequestFullScreen(); fullScreenNode.onclick = function(){ if(VideoNode.webkITRequestFullscreen){ VideoNode.webkitRequestFullscreen(); } else if(VideoNode.mozRequestFullScreen){ VideoNode.mozRequestFullScreen(); } } ;
volumechange 当音量更改时
VideoNode.onvolumechange = function(){ console.log('volumechange'); } ;
声音随机更改
volumeNode.onclick = function(){ VideoNode.volume = Math.random(); } ;
seeking 当用户开始拖动进度条时 就会触发的事件
var seekingNum = 0; VideoNode.onseeking = function(){ console.log('seeking...'); seekingNum++; seeking.innerHTML = seekingNum; } ;
seeked 当用户对视频的进度条并且已经完成操作时会触发的事件
var seekedNum = 0; VideoNode.onseeked = function(){ console.log('seeked...'); seekedNum++; seeked.innerHTML = seekedNum; } ;
timeupdate监听视频播放的状态
VideoNode.addEventListener('timeupdate',function(){ // 总时长,以分钟:秒的形式显示 let allTime = parseInt(VideoNode.duration/60)+':'+parseInt(VideoNode.duration%60); // 当前时间,以分钟:秒的形式显示 let nowTime = parseInt(VideoNode.currentTime/60)+':'+parseInt(VideoNode.currentTime%60); timeNode.innerHTML = nowTime+'/'+allTime; } )
readystate 视频的准备信息
console.log(VideoNode.readyState); setTimeout(function(){ console.log(VideoNode.readyState); } ,500);
playbackRate 查看或设置视频的一个播放速度
console.log(VideoNode.playbackRate)
Rate设置倍速
//Rate设置0.5倍速 RateNode.children[0].onclick = function(){ VideoNode.playbackRate = 0.5; } ; //Rate设置1倍速 RateNode.children[1].onclick = function(){ VideoNode.playbackRate = 1; } ; //Rate设置2倍速 RateNode.children[2].onclick = function(){ VideoNode.playbackRate = 2; } ;
loop的设置
loopNode.onclick = function(){ if(VideoNode.loop == false){ this.innerHTML = '循环'; VideoNode.loop = true; } else{ this.innerHTML = '不循环'; VideoNode.loop = false; } } ;
src返回的数据
console.log('src='+VideoNode.src);
currentSrc返回的数据
console.log('currentSrc='+VideoNode.currentSrc);
监听ended事件
VideoNode.addEventListener('ended',function(){ console.log('视频播放结束了'); VideoNode.play(); } )
查看视频的网络状态
console.log(VideoNode.networkState)
手动设置控件 controls
VideoNode.controls = true;
手动设置静音 muted
VideoNode.muted = true;
自定义视频播放器
放图
!doctyPE html> html> head> meta charset="utf-8"> title> /title> style type="text/css"> *{ margin: 0; padding: 0; list-style: none; } .outerNode{ width: 540px; height: 332px; position: absolute; left: 50%; top: 50%; margin: -166px 0 0 -270px; box-shadow: 0 0 4px #5b606d; } .outerNode .videoNode{ width: 540px; height: 305px; float: left; background: black; } .outerNode .controlsNode{ width: 540px; height: 27px; float: left; background: url(images/ctrs_bg.gif) repeat-x; } .outerNode .controlsNode .playNode{ float: left; width: 15px; height: 17px; margin: 6px 0 0 14px; background: url(images/playNode.png) no-repeat; cursor: pointer; } .outerNode .controlsNode .pauseNode{ float: left; width: 15px; height: 17px; margin: 6px 0 0 14px; background: url(images/pause.png) no-repeat; cursor: pointer; } .outerNode .controlsNode .loadNode{ width: 267px; height: 10px; margin: 9px 0 0 14px; float: left; background: url(images/load_bg.png) repeat-x; position: relative; } .outerNode .controlsNode .loadNode .lineNode{ width: 0%; height: 7px; position: absolute; left: 0; top: 1px; background: url(images/line_bg.png) repeat-x; } .outerNode .controlsNode .loadNode .lineNode .lineRight{ width: 2px; height: 100%; position: absolute; right: 0; top: 0; background: url(images/line_r_bg.png) no-repeat; } .outerNode .controlsNode .loadNode .loadLeft{ height: 100%; width:3px ; position: absolute; left: 0; top: 0; background: url(images/left_bg.png) no-repeat; z-index: 4; } .outerNode .controlsNode .loadNode .loadRight{ height: 100%; width:3px ; position: absolute; right: 0; top: 0; background: url(images/right_bg.png) no-repeat; } .outerNode .controlsNode .loadNode .crlNode{ width: 17px; height: 17px; background: url(images/crl_bg.png); position: absolute; left: -8.5px; top: -3.5px; cursor: pointer; z-index: 5; } .outerNode .controlsNode .timeNode{ float: left; width: 75px; height: 10px; margin: 9px 0 0 9px; } .outerNode .controlsNode .timeNode span{ font-Size:10px; float: left; line-height: 10px; color: white; } .outerNode .controlsNode .volumeNode{ width: 17px; height: 16px; float: left; margin: 5px 0 0 6px; background: url(images/volume_bg.png); } .outerNode .controlsNode .volumeLine{ height: 8px; width: 61px; float: left; margin: 10px 0 0 4px; background: url(images/volumeLine_bg.png) repeat-x; position: relative; } .outerNode .controlsNode .volumeLine .v_left{ width: 3px; height:100%; position: absolute; left: 0; top: 0; background: url(images/v_left.png) no-repeat; } .outerNode .controlsNode .volumeLine .v_right{ width: 3px; height:100%; position: absolute; right: 0; top: 0; background: url(images/v_right.png) no-repeat; } .outerNode .controlsNode .volumeLine .v_DragNode{ width: 15px; height: 13px; position: absolute; left: 58.5px; top: -3.5px; background: url(images/vo_d.png) no-repeat; cursor: pointer; } .outerNode .controlsNode .fullNode{ width:15px; height:17px; float: left; margin: 6px 0 0 35px; background: url(images/full_bg.png) no-repeat; cursor: pointer; transition: 0.7s; } .outerNode .controlsNode .fullNode:hover{ background: url(images/full_hover_bg.png) no-repeat; } /style> /head> body> !-- 最外层的元素 --> div class='outerNode'> !-- video元素 --> video class='videoNode' src='data/imooc.mp4' poster="data/poster.jpg"> /video> !-- 控制器的元素 --> div class='controlsNode'> !-- 控制播放暂停的按钮 --> div class='playNode'> /div> !-- video的进度条 --> div class='loadNode'> div class='loadLeft'> /div> div class='loadRight'> /div> !-- 拖动进度条的按钮 --> div class='crlNode'> /div> !-- 真正的进度条 --> div class='lineNode'> div class='lineRight'> /div> /div> /div> !-- 时间的元素 --> div class='timeNode'> span class='now'> 00:00/span> span> - /span> span class='all'> 4:30/span> /div> !-- 声音的标志 --> div class='volumeNode'> /div> !-- 声音的条 --> div class='volumeLine'> div class='v_left'> /div> div class='v_right'> /div> div class='v_DragNode'> /div> /div> !-- 全屏的按钮 --> div class='fullNode'> /div> /div> /div> script type="text/javascript"> //播放暂停的控制 //PlayNode 播放器按钮 //VideoNode 播放器 //PlayBln 控制暂停播放的布尔值 //FullNode 全屏按钮 //nowNode 当前时间 //allNode 视频的全部时间 //LineNode 当前的进度条 //CrlNode 进度条按钮 //LoadNode 进度条外面的元素 var PlayNode = document.getElementsByclassname('playNode')[0], VideoNode = document.getElementsByClassName('videoNode')[0], FullNode = document.querySelector('.fullNode'), nowNode = document.querySelector('.now'), allNode = document.querySelector('.all'), LineNode = document.querySelector('.lineNode'), CrlNode = document.querySelector('.crlNode'), LoadNode = document.querySelector('.loadNode'), VDragNode = document.querySelector('.v_DragNode'), PlayBln = true; //播放、暂停的事件 PlayNode.onclick = function(){ //传统的通过布尔值去改变classname的方法 PlayBln = !PlayBln; if(PlayBln == false){ this.className = 'pauseNode'; VideoNode.play(); } else{ this.className = 'playNode'; VideoNode.pause(); } } ; //全屏按钮的事件 FullNode.onclick = function(){ if(VideoNode.webkitRequestFullscreen){ VideoNode.webkitRequestFullscreen(); } else if(VideoNode.mozRequestFullScreen){ VideoNode.mozRequestFullScreen(); } else{ VideoNode.requestFullscreen(); } } ; //解决最开始时间的NAN的问题 VideoNode.addEventListener('canplay',function(){ var needTime = parseInt(VideoNode.duration); var s = needTime%60; var m = parseInt(needTime / 60); var timeNum = toDou(m)+':'+toDou(s); allNode.innerHTML = timeNum; } ,false); //解决 时间不足10 的问题 function toDou(time){ return time10?'0'+time:time; } //当视频播放的时候 需要当前的时间动起来 VideoNode.addEventListener('timeupdate',function(){ //目前的 百分比进度 LineNode.style.width = VideoNode.currentTime/VideoNode.duration*100+'%'; CrlNode.style.left = LineNode.offsetWidth - 8.5 + 'px' var needTime = parseInt(VideoNode.currentTime); var s = needTime%60; var m = parseInt(needTime / 60); var timeNum = toDou(m)+':'+toDou(s); nowNode.innerHTML = timeNum; } ,false); //声音的拖拽按钮 VDragNode.onmousedown = function(e){ var ev = e || event; var l = ev.clientX - this.offsetLeft; document.onmouSEMove = function(e){ var ev = e || event; var needX = ev.clientX - l; var maxX = VDragNode.parentNode.offsetWidth - 2.5; needX = needX -2.5 ? - 2.5 : needX; needX = needX > maxX ? maxX : needX; //计算0 - 1 var lastVolume = (VDragNode.offsetLeft + 2) / VDragNode.parentNode.offsetWidth ; VideoNode.volume = lastVolume 0 ? 0 : lastVolume; VDragNode.style.left = needX + 'px'; } ; document.onmouseup = function(e){ document.onmousemove = document.onmouseup = null; } return false; } //拖拽进度条按钮 CrlNode.onmousedown = function(e){ var ev = e || event; var l = ev.clientX - this.offsetLeft; VideoNode.pause(); document.onmousemove = function(e){ var ev = e || event; var needX = ev.clientX - l; var maxX = LoadNode.offsetWidth - 8.5; needX = needX -8.5 ? -8.5 : needX; needX = needX > maxX ? maxX : needX; CrlNode.style.left = needX + 'px'; LineNode.style.width = (CrlNode.offsetLeft+9)/LoadNode.offsetWidth*100 + '%'; } ; document.onmouseup = function(){ document.onmousemove = document.onmouseup = null; VideoNode.currentTime = VideoNode.duration * (CrlNode.offsetLeft+9)/LoadNode.offsetWidth; if(PlayBln == false){ //console.log(1); PlayNode.className = 'pauseNode'; VideoNode.play(); } else{ //console.log(2); PlayNode.className = 'playNode'; VideoNode.pause(); } } ; return false; } ; /script> /body> /html>
总结
以上所述是小编给大家介绍的HTML5自定义视频播放器源码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: HTML5自定义视频播放器源码
本文地址: https://pptw.com/jishu/586019.html