视频播放器

进入公司一个月拉,总于有机会写个视频播放器了,这次的工作内容主要是给视频播放器加上弹幕功能条,可惜是个小前端,主要是提功能接口和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绘制的;

              获取弹幕设置的数据。

原文地址:https://www.cnblogs.com/hanbingljw/p/3951601.html