[h5]一个基于HTML5实现的视频播放器代码解析(2)

电脑杂谈  发布时间:2019-08-26 02:03:08  来源:网络整理

复制代码

隐藏浏览器阴影元素后就可以开始动手实现自己的控制条了。实现之前,我们得知道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()

html5导航网站源码_html5 mp4播放器源码_html5播放mp4视频代码

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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...