• 视频播放器


    进入公司一个月拉,总于有机会写个视频播放器了,这次的工作内容主要是给视频播放器加上弹幕功能条,可惜是个小前端,主要是提功能接口和json给后台。

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
          <title>弹幕</title>
          <meta charset="utf-8">
        <meta http-equive="X-UA-Compatible" IE="edge">
        <link rel="stylesheet" type="text/css" href="TM-CSS.css" charset="utf-8" />
          <script src="http://cdn.staticfile.org/jquery/2.1.0/jquery.min.js" type="text/javascript"></script>
      </head>
      <style>
      .demo{
          680px;
          margin:30px auto;
        }
        
      .player{margin-bottom: -5px;}
      .TM{
          position: relative;
          background-color: #010101;
          height: 35px;
          line-height: 34px;
          680px;
        }
      .TM-wrap {
          display: inline-block;
          position: relative;
          height: 20px;
          60px;
          line-height: 20px;
          vertical-align: middle;
          background-color: #4a90d1;
          border-radius: 6px;
          -webkit-border-radius:6px;
          -moz-border-radius:6px;
          -o-border-radius:6px;
          -ms-border-radius:6px;
          cursor: pointer;
       }
     
      .TM-wrapinner {
          background-color: #717171;
          border: 1px solid #5c5c5c;
          border-radius: 6px;
          color: #c4c4c4;
          font-size: 14px;
          font-weight: bold;
          position: absolute;
          left:28px;
          text-align: center;
          30px;
          margin-top: -1px;
          -webkit-border-radius:6px;
          -moz-border-radius:6px;
          -o-border-radius:6px;
          -ms-border-radius:6px;
      }
        .TM-send{
          background-color: #285783;
          color:white;
          padding:2px 25px;
          border-radius: 2px;
          -webkit-border-radius:2px;
          -moz-border-radius:2px;
          -o-border-radius:2px;
          -ms-border-radius:2px;
          cursor: pointer;
          font-size: 14px;
         }
        .TM-btn{
           background-color: #252928;
           border:1px solid #3d3b3c;
           border-radius: 2px;
           color:#a8a7b5;
           margin:0 0 0 10px;
           padding: 2px 5px;
           cursor: pointer;
           font-size: 14px;
         }
        #msg{ 356px; }
        .TM-pop{
           position: absolute;
           display: inline-block;
           left: 40px;
           top:-130px;
           240px;
           height: 125px;
           background-color: #ebebeb;
           border: 1px solid #c4c4c4;
         }
        .TM-pop-cont {
           padding: 12px;
         }   
        .TM-pop-cont > select {
          border: 1px solid #cfcfcf;
          150px;
         }

        #TM-form{
            margin: 0 auto;
            620px;
        }
      </style>
      <body>
          <div class="demo">

          <!--播放器-->
          <div class="player">

           <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="680" height="400" id="polyvplayer">
                    <param name="movie" value="http://player.polyv.net/player_polyv_20140829.swf?vid=e8888b74d1637589cca18f108ebaf4d1_e"/>
                    <param name="allowscriptaccess" value="always"/>
                    <param name="allowFullScreen" value="true" />
                    <embed src="http://player.polyv.net/player_polyv_20140829.swf?vid=e8888b74d1637589cca18f108ebaf4d1_e" width="680" height="400"  TYPE="application/x-shockwave-flash" allowscriptaccess="always" name="polyvplayer" allowFullScreen="true" />
                    </embed>
              </object>

          </div>

          <!--弹幕-->
           <div class="TM">
                   <form action="#" method="post" id="TM-form">
                    <span class="TM-btn">弹幕设置</span>
                    <div class="TM-wrap">
                        <span class="TM-wrapinner">|||</span>
                    </div>
                    <div class="TM-pop">
                        <div class="TM-pop-cont">
                            <label for="fontSize">字号 :</label>
                            <select id="fontSize" name="fontSize">
                                <option value="16">16号</option>
                                <option value="18">18号</option>
                                <option value="24" selected="selected">24号</option>
                                <option value="36">36号</option>
                                <option value="48">48号</option>
                            </select><br/>
                            <label for="fontMode">状态 :</label>
                            <select id="fontMode" name="fontMode">
                                <option value="top">顶部</option>
                                <option value="bottom">底部</option>
                                <option value="roll" selected="selected">滚动</option>
                            </select><br/>
                            <label for="fontColor">颜色 :</label>
                            <select id="fontColor" name="fontColor">
                                <option value="0xFF0000">红色</option>
                                <option value="0x0000FF">蓝色</option>
                                <option value="0x00FF00">绿色</option>
                                <option value="0xFFFF00">黄色</option>
                                <option value="0xFFFFFF" selected="selected">白色</option>
                                <option value="0x000000">黑色</option>
                            </select>
                        </div>
                    </div>
                    <input type="text" placeholder="可以在这里输入弹幕哦!" id="msg" name="msg"/>
                    <span class="TM-send">
                        发 送
                    </span>
                    <span class="TM-smile">
                    </span>
                   </form>
           </div>
          </div>
        <script src="TMJS.js" type="text/javascript">

          /*
    * js for TM.html
    */

      $(function(){
              TM.popTM();  //弹幕设置
              TM.getData(); //获取并发送弹幕设置数据

         });
     

         var TM = {};
             TM.state = 1;//1为弹幕功能开启,0为关闭  
         /*
         *popTM()弹幕设置
         */
         TM.popTM = function(){
              var designDom = $(".TM-wrap"),
                  btnDom = $(".TM-wrapinner"),
                  popDom = $(".TM-pop"),
                  TMbtnDom = $(".TM-btn");
                 
     
              var Btnleft = "";
                  
                   popDom.hide();
                  TMbtnDom.click(function(e){
                  e.stopPropagation();
                    popDom.toggle();
                  });
                   

              $(".mask").click(function(){   //遮罩层,点击则隐藏弹幕设置面板
                     popDom.hide();
                  });

                  designDom.click(function(e){
                    e.stopPropagation();  //阻止事件冒泡
            
                    Btnleft = btnDom.position().left;

                      if(Btnleft==0){  //开启弹幕

                        j2s_showBarrage();
                        TM.state = 1;   //设置弹幕状态为开启
                        btnDom.css("left","28px");
                        $(this).css("background-color","#4a90d1");
                      }
                      else{            //关闭弹幕
                     
                        j2s_hideBarrage();
                        TM.state = 0;  //设置弹幕状态为关闭
                        $(this).css("background-color","#3d3d3d");
                        btnDom.css("left","0px");
                      }
                  });
         }
         /*
         *getData()
         *获取发送弹幕内容
         */
         TM.getData =function(){
              var TMdata = {};  //TMdata为弹幕数据
               /**默认值**/
               TMdata.fontSize = $("#fontSize").val();
               TMdata.fontMode = $("#fontMode").val();
               TMdata.fontColor = $("#fontColor").val();
               TMdata.msg = $("#msg").val();
               TMdata.vid = $(".TM-send").data("vid");
            
              /**选取的值**/
              $("#fontSize").change(function(){
                  TMdata.fontSize = $(this).val();
              });
              $("#fontMode").change(function(){
                  TMdata.fontMode = $(this).val();
              });
              $("#fontColor").change(function(){
                  TMdata.fontColor = $(this).val();
              });
              $("#msg").change(function(){
                  TMdata.msg = $(this).val();
              });

           
            /*为发送按钮绑定回车快捷键*/

                $("#TM-form").on("keydown",function(e){
                  var e = e||event;
                  var kc = e.which ||e.keyCode;
                   e.stopPropagation();
                   
                  if(kc == 13){

                      TMdata.fontSize = $("#fontSize").val();
                      TMdata.fontMode = $("#fontMode").val();
                      TMdata.fontColor = $("#fontColor").val();
                      TMdata.msg = $("#msg").val();
                      TMdata.vid = $(".TM-send").data("vid");

                    $(".TM-send").triggerHandler("click");
                    e.preventDefault();
                  }
                })

            /*发送*/
              $(".TM-send").click(function(e){   //点击发送按钮
                   e.stopPropagation();
             
                    var time = getPlayer("polyvplayer").GetCurrentTime();//调用swf播放器函数
                    var hour = Math.floor(time/3600);
                    var minute = Math.floor((time%3600)/60);
                    var second = (time%60)+1;
                    
                    var timeformatted = hour+":"+minute+":"+second;

                    var PostData ={            
                          //需要发送的数据
                              vid:TMdata.vid,
                              msg:TMdata.msg,
                              time:timeformatted,
                              fontSize:TMdata.fontSize,
                              fontMode:TMdata.fontMode,
                              fontColor:TMdata.fontColor,
                              timestamp:timestamp()
                          };      
                
            var dummy = new iframeform('http://go.polyv.net/mu/add?');   
                        dummy.addParameter('vid',PostData.vid);   //在form中插入数据
                        dummy.addParameter('msg',PostData.msg);
                        dummy.addParameter('time',PostData.time);
                        dummy.addParameter('fontSize',PostData.fontSize);
                        dummy.addParameter('fontMode',PostData.fontMode);
                        dummy.addParameter('fontColor',PostData.fontColor);
                        dummy.addParameter('timestamp',PostData.timestamp);
                        dummy.send();    //发送form表单
              
            j2s_reloadBarrageData();
            
                    /*
                    $.post("http://go.polyv.net/mu/add?",PostData,function(){
                                 $("#msg").val("");        
                                 j2s_reloadBarrageData(); //存在跨域的问题
                    }); */
                });
         }

       
    function iframeform(url)        //创建form和iframe,用于解决js跨域问题
    {
        var object = this;
        object.time = new Date().getTime();
     
       object.addParameter = function(parameter,value)
        {
            $("<input type='hidden' />")
             .attr("name", parameter)
             .attr("value", value)
             .appendTo(object.form);
        };
     
        object.form = $('<form action="'+url+'" target="iframe'+object.time+'" style="display:none;" method="post"  id="form'+object.time+'" name="form'+object.time+'"></form>');
     
       
     
        object.send = function()
        {
            var iframe = $('<iframe data-time="'+object.time+'" style="display:none;" id="iframe'+object.time+'" name="iframe'+object.time+'"></iframe>');
            $( "body" ).append(iframe);
            $( "body" ).append(object.form);
            object.form.submit();
            iframe.load(function(){  
                        
                         $('#form'+$(this).data('time')).remove();
                         $(this).remove();
                         j2s_reloadBarrageData();
                         $("#msg").val("");
                    
         });
        
        }
    }



    /****************定义*************/
      function timestamp(){
        var timestamp = Date.parse(new Date());
        return timestamp;
     }


    function getPlayer(movieName) {
          if (navigator.appName.indexOf("Microsoft") != -1) {

            return $("#"+movieName)[0];
          } else {
            return document[movieName];
          }
    }
     
      function s2j_callOnBarrageUrl()
    {
        var vid =$(".TM-send").data("vid");
        return "http://go.polyv.net/mu/"+vid+".json";
     
    }

    function j2s_showBarrage()
    {
      var player = thisMovie("polyvplayer");  
      if(player != undefined && player.j2s_showBarrage!= undefined)
      {
        player.j2s_showBarrage();
      }
    }

    function j2s_hideBarrage()
    {
      var player = thisMovie("polyvplayer");  
      if(player != undefined && player.j2s_hideBarrage!= undefined)
      {
        player.j2s_hideBarrage();
      }
    }

    function j2s_reloadBarrageData()
    {
      var player = thisMovie("polyvplayer");  
      if(player != undefined && player.j2s_reloadBarrageData!= undefined)
      {
        player.j2s_reloadBarrageData();
      }
    }

    function j2s_addBarrageMessage()
    {
      var player = thisMovie("polyvplayer");  
      if(player != undefined && player.j2s_addBarrageMessage!= undefined)
      {
        player.j2s_addBarrageMessage('[{"msg":"登登登登dedede!!!!","time":"0:0:16","fontSize":"big","fontColor":"0xffffff","fontMode":"roll"},{"msg":"等等等的呢嗯的呢!!!!","time":"0:0:16","fontSize":"big","fontColor":"0xffffff","fontMode":"roll"},{"msg":"苏打水苏打水!!!!","time":"0:0:16","fontSize":"big","fontColor":"0xffffff","fontMode":"roll"}]');
      }
     
    }

    function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
    var reObj=window[movieName];
    //ie10下面是collection集合
    try
    {
      if(reObj.length>0)
      {
        return reObj[0];
      }
     
    }catch(e)
    {

    }



    return ;
    }
    else {
    return document[movieName];
    }
    }  
      /*****************************/
     

          
        </script>
      </body>
    </html>

    后台:
      1<?php
      $file = "/tmp/danmu.json";
      //$body = @file_get_contents($file);

      $msg = $_POST["msg"];
      $time = $_POST["time"];
      $fontSize = $_POST["fontSize"];
      $fontMode = $_POST["fontMode"];
      $fontColor = $_POST["fontColor"];
      $timestamp = $_POST["timestamp"];

      if($msg){
          $line = $msg."##".$time."##".$fontSize."##".$fontColor."##".$fontMode."##".$timestamp." ";
          file_put_contents($file,$line,FILE_APPEND)
      }
    ?>

     

    难点所在:由于弹幕功能条以后有可能放进播放盒里面,而不是简单嵌入到html里面,因此尽量少使用图片,所以按钮是css绘制的;

                  获取弹幕设置的数据。

  • 相关阅读:
    5月读书日志
    把代码搬到Git Hub 吧(一)
    RTX二次开发(二)(基于ASP.NET)
    RTX二次开发(一)(基于ASP.NET)
    文件夹下迭代查询文件
    JS URL传递中文参数时出现乱码的处理
    js实现上下滑动侧边栏
    基本select语句的生命周期
    NodeJs下的测试框架Mocha
    带新人感想
  • 原文地址:https://www.cnblogs.com/hanbingljw/p/3951601.html
Copyright © 2020-2023  润新知