初试 HTML5 vdeo

第一次使用js控制html5 video:

HTML:

<!DOCTYPE html>
<html lang="zh-CN">
   <head>
         <meta charset="utf-8">
         <title>HTML5播放器</title>
      <link rel="stylesheet" href="HTML5Player.css"/>
         <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
   </head>
   <body>
         <div class="playerWrap">
              <video id="player" width="680" height="400" controls="controls"> 
                    <source src="wild.webm" type="video/webm">
                    浏览器不支持
              </video>
              <p>当前播放时长:<span class="currentTime" id="second"></span>
               实际观看时长:<span class="cout"></span>
               当前日期时间:<span id="demo"></span>
            </p>
            <p>
               当前进度条共向前推进了:<span class="mfront">0</span>秒
               当前进度条共向后推进了:<span class="mback">0</span></p>
            <p>
               上次观看的时长:<span class="visited">0</span>
               <button class="playerAgain">从新播放</button>
            </p>
            <p>当前播放的路径:<span class="srcName"></span></p>
         
              
       </div>
    <script src="HTML5Player.js"></script>
   </body>
</html>

css:

      .playerWrap{
          width: 100%;
          margin:0 auto;
          text-align: center;
      }
      video{
          margin:0 auto;
          background-color: black;
      }
      .currentTime,
      .cout,
      #demo{
          font-weight: bold;
      }

js:(这是重点)

 $(function(){
            //属性
                 var TimeDom = $(".currentTime"),
                     playerSecond = document.getElementById("player"),
               CountT = $(".cout"),
               playAgainDom = $(".playerAgain"), 
               frontDom = $(".mfront"),
               backDom = $(".mback"),
               visitedDom = $(".visited"),
               srcName = $(".srcName"),
               pid = 0;//区别不同视频
               playedTime = 0,//当前已播放的时间范围范围
                     movetime = 0,//移动进度后的某时刻
                     CRtime = 0, //移动前的时刻
                     Movefront = 0,//向前拖动进度的时长
                     MoveBack = 0,//向后拖动进度的时长
                     moveState = 0;//判断播放进度是否被拖动,0为正常播放,1为进度条被拖动
               /****************************************************************************/ 
                /*
                *当观看进度条拖动时,获取正确观看总时长
                */
                   playerSecond.onseeking = function(){
                        moveState = 1;
                 
                     movetime =parseInt(playerSecond.currentTime);//移动后的时刻
                     CRtime = parseInt(TimeDom.text());//移动前的时刻
                     

                       if(movetime > CRtime){
                                Movefront += movetime-CRtime;   //获取向前拖动的时间
                          }else{
                                MoveBack += CRtime-movetime;    //获取向后拖动的时间
                                }

                  if(isNaN(Movefront))
                      Movefront = 0;
                   if(isNaN(MoveBack))  //若上次未观看完毕,下次播放时从上次位置重新播放
                      MoveBack = 0;     //会触发onseeking事件,MoveBack 的值可能为NaN

                  frontDom.text(""+Movefront);
                  backDom.text(""+ MoveBack);
                       //alert("Movefront:"+ Movefront+"  "+"MoveBack:"+MoveBack);
                   };
             /*
             *function getMoveTime()  
             *获取观看视频时,人为向前拉动进度的总时长 Movefront
             *获取观看视频时,人为向后拉动进度的总时长 MoveBack
             *返回两参数:Movefront,MoveBack
             */   
              function getMoveTime(){
                  return {"Movefront":Movefront,"MoveBack":MoveBack};
              }
          /*********************************************************************************/    
             /*
          *GetTime()  
          *为页面添加数据
          *每间隔一秒更新所取得的当前时长,和观看时长
          */      
         function GetTime(){
   
            TimeDom.text(""+playerSecond.currentTime); //记录当前播放时长
            CountT.text(""+getRealPlayTime()+"秒");//记录计时器内容
            
            getLocalTime();//获取当地时间
            srcName.text(playerSecond.currentSrc);

            setTimeout(GetTime,1000);
         }
        /******************************/
        /**************main***************/
          window.onload = function(){
            var t = setTimeout(GetTime,2000);  //加载后2s运行GetTime函数
            getVisitedTime();//获取上次播放时长终点
            PlayAgain(); //重新播放
          }  
          /*********************************************************/ 
          /*
          *function getRealPlayTime()
          *获取真实视频播放时长
          */
           var addTime = 0, myVar = '';
          function getRealPlayTime(){
             
                 
              playerSecond.onplay = function(time){
                myVar=setInterval(function(){myTimer()},1000);
              }//播放开始时计算时间
             playerSecond.onpause = function(){
                myStopFunction();
              
             }//停止播放计算时间
              playerSecond.onended = function(){
                myStopFunction();
              }
              /***/
             function myTimer(){
                    addTime++;
             }//开始计时
             function myStopFunction(){
                    clearInterval(myVar);
             }//暂停计时

            return addTime;

          }
         /*********************************/
         /*
         *function getLocalTime()
         *获取本地时间
         */
         function getLocalTime(){
               var d=new Date();
             //var t=d.toLocaleDateString();//获取当前日期
               var t=d.toLocaleString();//获取当前时间与日期

              document.getElementById("demo").innerHTML = t;
         }
         /*********************************/
         /*
         *function getVisitedTime()
         *记录上次未看完的时刻
         */
         function getVisitedTime(){
             var visitedTime = 0;

             playerSecond.onabort = recordTime;
             playerSecond.onemptied = recordTime;
             playerSecond.onerror = recordTime;
             window.onunload = function(){   //关闭页面时,还没播放完
                  if((playerSecond.duration - playerSecond.currentTime)>1)
                    recordTime();
             }
          //   playerSecond.onpause = recordTime;
            /**/
             function recordTime(){
                 visitedTime = playerSecond.currentTime;
                 setCookie("visitedTime",visitedTime);
             }
            /**/
             if(getCookie("visitedTime")){
               visitedTime = getCookie("visitedTime")
               playerSecond.currentTime = visitedTime;
             }

             visitedDom.text(visitedTime);
         }
         /***************/
         function setCookie(name,value){
              var Days = 30;
              var exp = new Date();
              exp.setTime(exp.getTime() + Days*24*60*60*1000);
              document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
          }
          /***/
          function getCookie(name){
              var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
           
              if(arr=document.cookie.match(reg))
           
                  return (arr[2]);
              else
                  return null;
          }

         /*********************************/
         /*
         *function PlayAgain()
         *重新播放一次
         */
         function PlayAgain(){
            playAgainDom.bind("click",function(){
              playerSecond.currentTime = 0;
            });
         }
         /*********************************/
         /*
         *function playNextVideo()
         *播放下一视频
         */
         function playNextVideo(){

         }
         /*****************************/
         //function creatPid()
         //返回pid,
         //用于区别不同的视频,每个视频拥有一个独一无二的pid
         function creatPid(){
               var $Date = new Date();
               var $time = $Date.getTime()+"";
               var randnum =parseInt(Math.random()*800000+100000)+"";
    
            return ($time+randnum);
         }
         /****************************/
         /*********************************/
          });

 /*************************/

效果图:

总结:利用了播放器的currentSrc属性获取当前播放的文件路径,currentTime属性获取当前播放的时长和设置播放的起点,同时利用了cookie记录上次未播放完的位置,下次可继续播放或重新播放;由于video的api 没有实际计算观看时长(也即用户实际观看的时长),所以用到了浏览器计算器时长,原理:当播放时,开始计算,暂停时和结束时,停止播放;

注意事项:video对象必须是HTMLDOM对象,获取方式 :document.getElementById("play")或 var dom = $("#play").get(0);

              同时,video对象必须是video标签等加载后才能获取到,window.onload后

参考:html5 video 事件及属性API  http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp

 

posted @ 2015-01-09 11:50  奋力向前CO  阅读(533)  评论(0编辑  收藏  举报