HTML5实现video标签的自定义播放进度条

现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用。

html代码:

<!DOCTYPE html>
<html lang="en"head>
    meta charset="UTF-8"title>HTML5-Video-Player</style type="text/css">
        .videoPlayer{
            border: 1px solid #000;
            width 600px;
        }
        #video
            margin-top 0px
        #videoControls
        .show
            opacity 1
        .hide 0
        #progressWrap
            background-color black
            height 25px
            cursor pointer
        #playProgress red
            border-right 2px solid blue
        #showProgress: 
            font-weight 600
            font-size 20px
            line-height}
    stylebodydiv class="">
        h1>HTML5_Video_Player="videoPlayer" id="videoContainer">
            video id="video" 
            width="600" height="360" 
            preload controls
            >
                source src="http://nettuts.s3.amazonaws.com/763_sammyJSIntro/trailer_test.mp4" type='video/mp4'="http://nettuts.s3.amazonaws.com/763_sammyJSIntro/trailer_test.ogg"='video/ogg'video="videoControls"> 
                ="progressWrap">  
                    ="playProgress">  
                        span ="showProgress">0span> 
                    div>
                    button ="playBtn" title="Play"> 播放 button="fullScreenBtn"="FullScreen Toggle">  全屏 > 
            > 
        html>

js代码:

// 为了不随意的创建全局变量,我们将我们的代码放在一个自己调用自己的匿名函数中,这是一个好的编程习惯
        (function(window,document){
             获取要操作的元素
            var video = document.getElementById("video");
            var videoControls = document.getElementById("videoControls"var videoContainer = document.getElementById("videoContainer"var controls = document.getElementById("video_controls"var playBtn = document.getElementById("playBtn"var fullScreenBtn = document.getElementById("fullScreenBtn"var progressWrap = document.getElementById("progressWrap"var playProgress = document.getElementById("playProgress"var fullScreenFlag = false;
            var progressFlag;

             创建我们的操作对象,我们的所有操作都在这个对象上。
            var videoPlayer = {
                init: (){
                    var that = this;
                    video.removeAttribute("controls");
                    bindEvent(video,"loadeddata",videoPlayer.initControls);
                    videoPlayer.operateControls();
                },initControls: (){
                    videoPlayer.showHideControls();
                },showHideControls: (){
                    bindEvent(video,"mouseover"(){
                    bindEvent(playBtn,"click" 原生的JavaScript事件绑定函数
             bindEvent(ele,eventName,func){
                if(window.addEventListener){
                    ele.addEventListener(eventName,func);
                }
                else{
                    ele.attachEvent('on' + eventName,func);
                }
            }
             显示video的控制面板
             showControls(){
                videoControls.style.opacity = 1;
            }
             隐藏video的控制面板
             hideControls(){
                 为了让控制面板一直出现,我把videoControls.style.opacity的值改为1
                videoControls.style.opacity = 1 控制video的播放
             play(){
                if ( video.paused || video.ended ){              
                     ( video.ended ){ 
                        video.currentTime = 0;
                        } 
                    video.play();
                    playBtn.innerHTML = "暂停"; 
                    progressFlag = setInterval(getProgress,60);
                } 
                { 
                    video.pause(); 
                    playBtn.innerHTML = "播放";
                    clearInterval(progressFlag);
                } 
            }
             控制video是否全屏,额这一部分没有实现好,以后有空我会接着研究一下
             fullScreen(){
                (fullScreenFlag){
                    videoContainer.webkitCancelFullScreen();
                }
                {
                    videoContainer.webkitRequestFullscreen();
                }
            }
             video的播放条
             getProgress(){
                var percent = video.currentTime / video.duration;
                playProgress.style.width = percent * (progressWrap.offsetWidth) - 2 + "px";
                showProgress.innerHTML = (percent * 100).toFixed(1) + "%" 鼠标在播放条上点击时进行捕获并进行处理
             videoSeek(e){
                if(video.paused || video.ended){
                    play();
                    enhanceVideoSeek(e);
                }
                {
                    enhanceVideoSeek(e);
                }

            }
             enhanceVideoSeek(e){
                clearInterval(progressFlag);
                var length = e.pageX - progressWrap.offsetLeft;
                var percent = length / progressWrap.offsetWidth;
                playProgress.style.width = percent * (progressWrap.offsetWidth) - 2 + "px";
                video.currentTime = percent * video.duration;
                progressFlag = setInterval(getProgress,1)">);
            }

        }(this,document))

 

相关文章

HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码