
隐藏浏览器阴影元素后就可以开始动手实现自己的控制条了。实现之前,我们得知道video提供的API。
各个浏览器操作播放器提供的API名称一般都带有厂商前缀,所有基本上每一个API函数都对应多个版本,需要考量兼容性。
1.全屏事件

["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"].forEach(function(eventType){ document.addEventListener(eventType, function(event){ }) });

如果播放器全屏状态放生变化里面的事件都会触发。上面的事件我们只了解全屏状态出现变化,但不知道当前是处于全屏还是退出全屏。还应该结合全屏状态API。
2.当前是否全屏状态

hivideo.prototype.isFullScreen = function(){ return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; };

上面是hivideo封装的判别是否全屏的变量。
3.进入全屏模式

if (video.requestFullscreen) { video.requestFullscreen(); } else if (video.webkitRequestFullscreen) { video.webkitRequestFullscreen(); } else if (video.mozRequestFullScreen) { video.mozRequestFullScreen(); } else if (video.msRequestFullscreen) { video.msRequestFullscreen(); }

4.退出全屏模式

if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); }

5.播放状态
video.paused:true表示未播放, false表示正在播放。
6.播放视频
video.play()

7.暂停播放
video.pause()
8.是否静音
video.muted = true, 静音
Video.muted = false,不静音
9.声音控制
设置video.volume控制声音,值的范围0到100。
10.当前播放时间
video.currentTime,可读可写,单位为妙。可通过<input type=’range’>的值显示播放进度。
11.视频总周期
video.duration,单位为妙。
12.播放时间更新事件
video.addEventListener("timeupdate", function(){
});
13.视频元数据加载完成事件
一般播放视频时就会显示视频总时长,触发loadedmetadata事件时元数据将要加载完成,所以可以在该事件中修改总时长的显示。
video.addEventListener("loadedmetadata", function(){
}
14.视频播放结束事件
video.addEventListener("ended", function(){
}
有了前面列举的API,要实现自定义播放器就比较易于了,在自己推动播放器的过程中对应位置读取对应API即可。
原理很简单,在全屏时播放器容器沾满了整个键盘,我们可以给容器附加一个自定义样式,让容器旋转90度。

.rotate90{ -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); }

旋转后的容器尺寸和高度也要微调,需要把屏幕的高度screen.height赋给容器的长度,而容器的高度设定为屏幕的长度。这样就实现了全屏播放效果。下面是全屏播放控制的完整代码:

hivideo.prototype.bindFullEvent = function(){ var self = this; var origWidth = origHeight = 0; ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"].forEach(function(eventType){ var curFullhivideoId = null; document.addEventListener(eventType, function(event){ if((curFullhivideoId = document.body.getAttribute("curfullHivideo")) && curFullhivideoId !== self.videoId_ ){ return; } var isRotate = self.options.isrotate; if(self.isFullScreen()){ var cltHeight = isRotate ? window.screen.width : window.screen.height; var cltWidth = isRotate ? window.screen.height : window.screen.width; if(isRotate && !hivideo.hasClass(self.videoParent, "rotate90")){ hivideo.addClass(self.videoParent, "rotate90"); } self.videoParent.style.height = cltHeight + "px"; self.videoParent.style.width = cltWidth + "px"; }else{ if(isRotate) self.videoParent.className = self.videoParent.className.replace("rotate90", "").trim(); self.videoParent.style.height = origHeight + "px"; self.videoParent.style.width = origWidth + "px"; } }) }); self.fullBtn && self.fullBtn.addEventListener("click", function(){ if(!self.isFullScreen()){ document.body.setAttribute("curfullHivideo", self.videoId_); origWidth = self.videoParent.offsetWidth; origHeight = self.videoParent.offsetHeight; // go full-screen if (self.videoParent.requestFullscreen) { self.videoParent.requestFullscreen(); } else if (self.videoParent.webkitRequestFullscreen) { self.videoParent.webkitRequestFullscreen(); } else if (self.videoParent.mozRequestFullScreen) { self.videoParent.mozRequestFullScreen(); } else if (self.videoParent.msRequestFullscreen) { self.videoParent.msRequestFullscreen(); } self.exchangeBtnStatus(this, false); }else{ // exit full-screen if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } self.exchangeBtnStatus(this, true); } }); return self; };

1.CommonJS支持

(function(global, factory){ "use strict"; //支持commonJs规范 if(typeof module === "object" && typeof module.exports === "object"){ module.exports = factory(global); }else{ factory(global); } }(typeof window !== "undefined" ? window : this, function(window) }

2.AMD支持

//支持AMD规范 if (typeof define === "function" && define.amd){ define("hivideo", [], function(){ return hivideo; }) }
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-120599-2.html
因为质检总局抢不到小米哈哈
让台独份子折腾吧
----