• 初试 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

  • 相关阅读:
    CentOS6.5 [ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/lib/mysqld/mysqld.pid' (Errcode: 2)
    linux防火墙
    Linux磁盘分区与LVM详解
    LVM分区扩展空间
    linux 分区方法(超过2T的硬盘)
    linux异常处理:selinux配置错误导致无法重启
    linux网卡配置文件
    Zabbix4.0系统clone、mass update使用
    Zabbix系统配置日志监控告警--关键字触发
    Zabbix4.0系统配置事件通知
  • 原文地址:https://www.cnblogs.com/hanbingljw/p/3986257.html
Copyright © 2020-2023  润新知