用html5新增的js媒体 API手写的一个视频播放器
来源:互联网 发布:oss 阿里云 编辑:程序博客网 时间:2024/05/17 04:13
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>html5视频测试</title> <style> *{margin: 0;padding: 0;list-style-type: none;font-family: "微软雅黑";} .player{width: 1024px;margin: 50px auto;position: relative;} .player video{width:1024px;} .player .ctl{width: 1024px;height: 30px;background: rgba(90,90,90,.6);position: absolute;right: 0; bottom: 4px;cursor:default;opacity:0.8;transition:opacity 0.8s;} .player .ctl .btn,.player .ctl .time{padding: 0 5px; font-size: 14px;line-height: 20px;border-radius: 5px; background: #fff;position: absolute;bottom: 5px;} .player .ctl .btn-play{left: 20px;} .player .ctl .btn-jy{right: 200px;} .player .ctl .btn-qp{right: 20px;} .player .ctl .sch{height: 12px;border:1px solid #fff;border-radius: 10px; position: absolute; bottom: 8px;overflow: hidden;z-index: 1;} .player .ctl .sch-play{width: 400px;left:230px;} .player .ctl .sch-yl{width:100px;right:80px;} .player .ctl .sch-play .sch-sp{width: 200px;} .player .ctl .sch-yl .sch-sp{width: 80px;} .player .ctl .sch .sch-sp{position: absolute;height: 12px; top: 0;background: #fff;} .player .ctl .sch-btn{position: absolute;width: 30px;height: 20px;border-radius: 5px; top: 5px;z-index: 2;background: #fff;} .player .ctl .sch-s{left:430px;} .player .ctl .sch-y{left:900px;} /*.player .ctl li:nth-child(1){position: absolute;left:20px;top: 50%;margin-top:-15px; }*/ </style> </head> <body> <div class="player"> <video> <source src="潭州教育.mp4" type="video/mp4"> 您的浏览器不支持Video标签。 </video> <ul class="ctl" onselectstart="return false"> <li class="btn btn-play">播放</li> <li class="time" style="left:100px">00:00:00</li> <li class="sch sch-play"> <span class="sch-sp" style = "width:0px;"></span> </li> <li class="sch-btn sch-s" style="left:215px;"></li> <li class="time" style="right:300px">00:00:00</li> <li class="btn btn-jy">静音</li> <li class="sch sch-yl"> <span class="sch-sp"></span> </li> <li class="sch-btn sch-y"></li> <li class="btn btn-qp">全屏</li> </ul> </div> <script type="text/javascript"> var oVid = document.getElementsByClassName("player")[0]; var oVideo = oVid.children[0]; //拿到video var oCtl = oVid.children[1] var oUl = oCtl.children; //拿到所有li var oUlWidth = parseInt(oUl[2].offsetWidth)-2; var maxTime; var thisTime; var oSp = oUl[2].children[0]; console.log(parseInt(oUl[3].style.left)); var oLeft = parseInt(oUl[2].offsetLeft)+parseInt(oVid.offsetLeft)+parseInt(oCtl.offsetLeft); var oSchSp = parseInt(oVid.offsetLeft); oUl[0].onclick = function(){ if(oVideo.paused){ oVideo.play(); oUl[0].innerHTML = "暂停"; oVid.onmouseover = function(){ oCtl.style.opacity=0.8; } oVid.onmouseout = function(){ oCtl.style.opacity=0; } }else{ oVideo.pause(); oUl[0].innerHTML = "播放"; oVid.onmouseover=null; oVid.onmouseout =null; } } var oDateOvideo = function(time){ time = ""+time; time = time.length<2?0+time:time; return time; } oVideo.onloadedmetadata = function(){ maxTime = oVideo.duration; var h = oDateOvideo(Math.floor(maxTime/3600)); //时 var m = oDateOvideo(Math.floor(maxTime%3600/60)); //分 var s = oDateOvideo(Math.floor(maxTime%3600%60)); //秒 oUl[4].innerHTML = h+":"+m+":"+s; } function date(){ thisTime = oVideo.currentTime; var h = oDateOvideo(Math.floor(thisTime/3600)); //时 var m = oDateOvideo(Math.floor(thisTime%3600/60)); //分 var s = oDateOvideo(Math.floor(thisTime%3600%60)); //秒 oUl[1].innerHTML = h+":"+m+":"+s; var t = (thisTime/maxTime); //console.log(oUl[2].children[0].width); oSp.style.width = parseInt(oUlWidth-2) * t.toFixed(2)+"px"; oUl[3].style.left = 215+parseInt( oSp.style.width ) +"px"; } oVideo.ontimeupdate = date; oUl[5].onclick = function(){ if(oVideo.muted){ oVideo.muted=false; oUl[5].innerHTML = "静音"; }else{ oVideo.muted=true; oUl[5].innerHTML = "声音"; } } var move = function(ev){ ev = ev || window.event; var _X = ev.clientX; //oUl[3].style.left = parseInt(_X) - oSchSp; //var strae = parseInt(oUl[3].style.left); oVideo.ontimeupdate = null; //console.log(_X-oLeft); var t = _X-oLeft; oVideo.currentTime = parseInt(maxTime * (t/oUlWidth).toFixed(2)); //console.log(parseInt(oUl[3].style.left)); oSp.style.width = oUlWidth * (t/oUlWidth).toFixed(2)+"px"; oUl[3].style.left = _X - oSchSp-15 +"px"; document.onmousemove = function(ev){ ev = ev || window.event; var _x = ev.clientX; var xChange = parseInt(_x)-parseInt(_X); //oUl[3].style.left = xChange + _X - oSchSp - 15 +"px"; var t = _x - oLeft; console.log(oVideo.currentTime); oVideo.currentTime = parseInt(maxTime * (t/oUlWidth).toFixed(2)); oSp.style.width = oUlWidth * (t/oUlWidth).toFixed(2)+"px"; if ((_x - oSchSp-15)<200) { oUl[3].style.left = 200+"px"; } else if ((_x - oSchSp-15)>600) { oUl[3].style.left = 600+"px"; } else{ oUl[3].style.left = _x - oSchSp-15+"px"; } //console.log(parseInt(_x)-parseInt(_X)); date(); } document.onmouseup = function(){ //oUl[2].onmousedown = null; document.onmousemove = null; oVideo.ontimeupdate = date; //alert(oSp.onmousemove); } } oUl[2].onmousedown = move; oUl[3].onmousedown = move; oUl[8].onclick = function(){ //oVideo.webkitRequestFullScreen(); if(oVideo.requestFullScreen) { oVideo.requestFullScreen(); } else if(oVideo.mozRequestFullScreen) { oVideo.mozRequestFullScreen(); } else if(oVideo.webkitRequestFullScreen) { oVideo.webkitRequestFullScreen(); } } /* video和audio属性: Autoplay 视频就绪自动播放 controls 向用户显示播放控件 Width 设置播放器宽度 //audio没有 Height 设置播放器高度 //audio没有 Loop 播放完是否继续播放该视频,循环播放 Preload 属性描述了在页面加载后是否预加载音视频; 如果设置了 autoplay 属性,则忽略该属性; 属性值: none:不执行预加载也不执行元数据 mete:加载元数据(不加预载视频,但要获取视频时长等等属性) auto:默认值(预加载或缓冲) Src 视频url地址 Poster 加载等待的画面图片 Video API方法 play() pause() load() 全屏: webkit element.webkitRequestFullScreen(); Firefox element.mozRequestFullScreen(); W3C element.requestFullscreen(); 退出全屏: webkit document.webkitCancelFullScreen(); Firefox document.mozCancelFullScreen(); W3C document.exitFullscreen(); Video API属性 currentTime : 开始到播放现在所用的时间 duration : 媒体总时间(只读) volume : 0.0-1.0的音量相对值 muted : 是否静音 false /true paused : 媒体是否暂停(只读) ended : 媒体是否播放完毕(只读) error : 媒体发生错误的时候,返回错误代码 (只读) currentSrc : 以字符串的形式返回媒体地址(只读) loadstart progress suspend emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange HTML5支持的音频格式: Ogg 免费 支持的浏览器:C、F、O MP3 收费 支持的浏览器: I、C、S Wav 收费 支持的浏览器: F、O、S audio 属性 autoplay 自动播放 controls 向用户显示播放控件 loop 循环 preload 是否等加载完再播放 src 要播放的音频的 URL。 */ </script> </body></html>
0 0
- 用html5新增的js媒体 API手写的一个视频播放器
- 最好免费的 HTML5 & JS 网站视频播放器收集
- html5的视频播放
- HTML5新增的history API
- Android 媒体:网络视频播放器的基本设计
- HTML5的视频播放器videojs
- 基于HTML5的视频播放器
- 基于HTML5的视频播放器
- 基于HTML5的视频播放器
- HTML5 视频播放器 最全API
- JS控制HTML5媒体播放与暂停,及Chrome兼容的视频格式
- 2.5.0HTML5新增的拖放API
- HTML5常见的新增API详解
- 一个不错的媒体网页播放器(国外的)
- 使用MediaElement.js构建个性的HTML5音频和视频播放器
- 百度媒体云播放器cyberplayer支持M3U8格式的HTML5播放器
- HTML5移动开发(5)——制作一个漂亮的视频播放器
- Android之多媒体MediaPlayer(一个简单的音乐播放器)
- iOS多线程
- 迁移discuz
- Android Service 远程服务
- View的事件分发和工作机制
- enum 在c++中的使用
- 用html5新增的js媒体 API手写的一个视频播放器
- 完美解决myBase Desktop 破解
- 命令使用 su passwd ls
- 文件打开时open系统调用
- Linux 文件系统
- Java面试题集(一)
- Linux获取帮助
- Android 添加JNI文件到源码流程
- 文件管理与权限