视频标签<video></video>是H5中新增的标签,它自带播放按钮等控件,但在实际开发中我们是不会用标签中自带的控件属性的,一般我们都会自定义控件。
首先我们来看看视频标签自带的控件效果:
虽然总体来说,这些控件都有,但是往往我们见到的都不会是这样的,一般我们都会自己设计。
以下是我自己做的一个简单的案例,自定义一些控件并实现它的功能,效果如下:
现在我们可以来具体讲讲以上这些播放暂停全屏按钮都是如何自定义实现其功能的:
步骤:
1、首先我们把所需要的素材准备好:一个简短视频,播放按钮的图片,暂停按钮的图片,全屏按钮的图片
2、播放暂停全屏等按钮是图片,进度条使用的是progress标签,视屏总时长和播放的当前时间是用span标签装的,内容先初始化为0。这些排列的顺序可以自己调整摆放,这里我 使用的是定位
布局代码:
1 <div id="container"> 2 <video poster="img/oceans-clip.png"> 3 <source src="video/oceans-clip.mp4"></source> 4 <source src="video/oceans-clip.ogv"></source> 5 <source src="video/oceans-clip.webm"></source> 6 </video> 7 <div class="pos"> 8 <img src=" img/on.png" width="40px" id="playBtn" /> 9 <progress value="0" id="progress"></progress> 10 <div class="timebox"> 11 <span id="time1"> 12 00:00:00 13 </span>/ 14 <span id="time2"> 15 00:00:00 16 </span> 17 </div> 18 <img src="img/expand.jpg" width="35px" id="full"/> 19 </div> 20 </div>
CSS样式:
1 <style type="text/css"> 2 body,div,img{ 3 margin: 0; 4 padding: 0; 5 border: 0; 6 } 7 #container{ 8 width: 640px; 9 /*height: 400px;*/ 10 border: 1px solid pink; 11 /*position: relative;*/ 12 } 13 14 .pos{ 15 width: 640px; 16 height: 60px; 17 background: #242424; 18 margin-top: -7px; 19 position: relative; 20 21 } 22 #playBtn{ 23 position:absolute; 24 top: 10px; 25 left: 20px; 26 cursor: pointer; 27 } 28 #progress{ 29 height: 12px; 30 width: 320px; 31 position:absolute; 32 top: 24px; 33 left: 80px; 34 cursor: pointer; 35 36 } 37 .timebox{ 38 position:absolute; 39 top: 20px; 40 left: 420px; 41 cursor: pointer; 42 color: white; 43 } 44 45 #full{ 46 position:absolute; 47 top: 12px; 48 right: 20px; 49 cursor: pointer; 50 } 51 52 </style>
3.实现播放按钮功能:播放按钮绑定点击事件,视屏状态为暂停时,点击播放,状态为播放时,点击暂停,同时切换按钮背景图片,
实现代码如下:
1 var video = document.querySelector("video"); 2 var playBtn = document.getElementById("playBtn"); 3 playBtn.onclick = function(){ 4 if(video.paused){ 5 video.play(); 6 playBtn.src = "img/pause.png"; 7 }else{ 8 video.pause(); 9 playBtn.src = "img/on.png"; 10 } 11 }
4.实现全屏效果,因为浏览器的内核不同,所以会加一些浏览器内核前缀,代码也会很多:
1 var full = document.getElementById("full"); 2 var container = document.getElementById("container"); 3 var i = 1;//定义一个变量,用于记录是否为全屏状态 4 full.onclick = function(){ 5 i++;
//对2取余,为0则全屏,否则关闭全屏 6 if(i%2==0){
//点击开启全屏 7 if(container.requestFullScreen){ 8 container.requestFullScreen() 9 }else if(container.webkitRequestFullScreen){ 10 container.webkitRequestFullScreen()//谷歌 11 }else if(container.mozRequestFullScreen){ 12 container.mozRequestFullScreen()//火狐 13 }else if(div01.msRequestFullscreen){ 14 container.msRequestFullscreen()//ie 15 } 16 }else{
//关闭全屏 17 if(document.cancelFullscreen){ 18 document.cancelFullscreen(); 19 }else if(document.webkitCancelFullScreen){ 20 document.webkitCancelFullScreen(); 21 }else if(document.mozCancelFullScreen){ 22 document.mozCancelFullScreen(); 23 }else if(document.msExitFullscreen){ 24 document.msExitFullscreen(); 25 } 26 } 27 28 }
5、视频播放时间进行一个简单的修改,构造一个函数,使其标准化,当时间为个位数时,加一个字符串“0”,两位数时,添加空串
1 function number1(s){
2 if(s<10){
3 s="0"+s
4 }else{
5 s=""+s
6 }
7 return s;
8 }
6、动态获取视频总时长,和显示当前视频播放时间,并同时付给进度条的value,方法:oncanplay,ontimeupdate,代码如下:
1 var time1 = document.getElementById("time1"); 2 var time2 = document.getElementById("time2"); 3 var t1; 4 //视频获取时间单位为秒,要对它进行一些数据的处理 5 video.oncanplay = function(){
//获取视频总时长 6 t1 = video.duration; 7 var h = parseInt(t1/3600); 8 var m = parseInt(t1%3600/60); 9 var s = parseInt(t1%60);
//值显示在span标签中 10 time2.innerHTML = number1(h) + ":"+ number1(m) + ":" + number1(s); 11 } 12 13 video.ontimeupdate = function(){
//获取当前视频播放的时间 14 var t2 = video.currentTime; 15 var h = parseInt(t2/3600); 16 var m = parseInt(t2%3600/60); 17 var s = parseInt(t2%60); 18 time1.innerHTML = number1(h) + ":"+ number1(m) + ":" + number1(s); 19 progress.max = t2; 20 progress.value = t2/t1*progress.max; 21 }
7、进度条点击事件,及视频结束的处理:
1 video.onended = function(){ 2 progress.value = 0;
//结束时清0; 3 time1.innerHTML = "00"+":"+"00"+":"+"00"; 4 } 5 6 progress.onclick = function(e){ 7 //获取当前位置距离父级最左边的距离 8 //left = progress.offsetLeft; 9 //获取鼠标距离屏幕最左边的距离 10 //e.clientX 11 //获取鼠标距离当前元素最左边的距离 12 var left = e.offsetX; 13 console.log(left); 14 console.log(t1); 15 video.currentTime = left/320*t1; 16 }
大概步骤就是这样了,一个简单的视屏自定义控件功能就做好了。