弹幕客户端

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta charset="utf-8">  
  5.     <title></title>  
  6. </head>  
  7.   
  8. <style type="text/css">  
  9.   
  10. *{  
  11.     margin: 0;  
  12.     padding: 0;  
  13. }  
  14.   
  15.   
  16. #navBar{  
  17.     width: 50%;  
  18.     height: 400px;  
  19.     padding-bottom:40px;  
  20.     border: 1px solid #000;  
  21.     margin: 5% auto 0;  
  22.     position: relative;  
  23.     background: #ccc;  
  24. }  
  25.   
  26. #navBar #video{  
  27.     width:100%;  
  28.     height:100%;  
  29.     background:#fcfcfc;  
  30.     text-align:center;  
  31. }  
  32.   
  33. #navBar .dm_tool{  
  34.     width: 100%;  
  35.     height: 40px;  
  36.     background: #ccc;  
  37.     margin-top:1px;  
  38.     bottom: 0;  
  39.     display: flex;  
  40. }  
  41.   
  42. #navBar .dm_tool .dm_con{  
  43.     width: 89%;  
  44.     height: 38px;  
  45.     outline: none;  
  46.     border: 1px solid #ccc;  
  47.     padding-left: 10px;  
  48.     float: left;      
  49. }  
  50.   
  51. #navBar .dm_tool .sendToDm{  
  52.     width: 9.7%;  
  53.     background: limegreen;  
  54.     color: white;  
  55.     outline: none;  
  56.     border: 0;    
  57.     cursor:pointer;  
  58. }  
  59.   
  60. #navBar .dmArea{  
  61.     width:100%;  
  62.     height:400px;  
  63.     top:0;  
  64.     left:0;  
  65.     position:absolute;  
  66.     z-index:10;  
  67.     overflow:hidden;  
  68. }  
  69.   
  70. #navBar .dmArea span{  
  71.     white-space:nowrap;  
  72.     position:absolute;  
  73. }  
  74. </style>  
  75.   
  76. <body>  
  77.   
  78. <div id="navBar">  
  79.     <div id="video"><span style="position:absolute;top:45%;left:45%;">假装在播放视频</span></div>  
  80.     <div class="dm_tool">  
  81.         <input type="text" placeholder="say something..." name="dm_con" class="dm_con" />  
  82.         <button class="sendToDm">发一弹</button>  
  83.     </div>  
  84.     <div class="dmArea">  
  85.         <!--span>假装在播放视频 假装在播放视频 </span-->  
  86.     </div>  
  87. </div>  
  88.   
  89.   
  90. </body>  
  91. <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>  
  92. <script type="text/javascript">  
  93.   
  94. var DmClass = {  
  95.     "Dm_H":0, //弹幕区域高度  
  96.     "Dm_W":0,//弹幕区域宽度  
  97.     "DmObj":"",//弹幕区对象  
  98.   
  99.     //初始化方法  
  100.     init :  function(){  
  101.         var _this  = this;  
  102.   
  103.         _this.DmObj = $(".dmArea");  
  104.         _this.Dm_H = _this.DmObj.height();  
  105.         _this.Dm_W = _this.DmObj.width();  
  106.   
  107.         //发送弹幕方法  
  108.         _this.sendToDmFunc();  
  109.     },  
  110.   
  111.     sendToDmFunc    :       function(){  
  112.         var _this = this;  
  113.           
  114.         $(".sendToDm").click(function(){  
  115.   
  116.   
  117.             var sendCon = $('input[name="dm_con"]').val();  
  118.             if($.trim(sendCon) == "") {  
  119.                 var testList = ["hello world!","你好","视频真好看","吹牛我就服你!!","哈哈哈"];  
  120.                 var _s = Math.floor(Math.random()*5);  
  121.                 sendCon = testList[_s];  
  122.                 //return false;  
  123.             }  
  124.   
  125.             //json 数据格式  
  126.             var sData = '{"data":"'+sendCon+'"}';  
  127.             //发送到sockey服务器  
  128.             SocketClass.websocket.send(sData);  
  129.   
  130.   
  131.   
  132.         });  
  133.     },  
  134.   
  135.     //往弹幕区域添加从服务器广播过来的弹幕数据  
  136.     addToDm :   function(rdata){  
  137.         var _this = this;  
  138.   
  139.         //json转对象  
  140.         var newObj = eval('(' + rdata + ')');  
  141.   
  142.         //定义新的弹幕对象  
  143.         var newDom = $("<span></span>");  
  144.   
  145.         //随机取一个位置  
  146.         var p = _this.randPosition();  
  147.   
  148.         //放入弹幕内容  
  149.         newDom.html(newObj.data);  
  150.         _this.DmObj.append(newDom);  
  151.   
  152.         //设置初始位置为弹幕区的最右边  
  153.         newDom.css({"left":_this.Dm_W+"px","top":p+"px"});  
  154.   
  155.   
  156.         //当前单条弹幕位置  
  157.         var tR = _this.Dm_W;  
  158.         //定时器 20毫秒执行一次  
  159.         var newTimer = setInterval(function(){  
  160.   
  161.             tR -2;  
  162.   
  163.             //当弹幕走出弹幕区将之删除,并清除当前的定时器  
  164.             if(tR <= -newDom.width()){  
  165.                 newDom.remove();  
  166.                 clearInterval(newTimer);  
  167.             }  
  168.             //新位置  
  169.             newDom.css("left",tR+"px");  
  170.         },20);  
  171.   
  172.     },  
  173.   
  174.     //随机获取位置  
  175.     randPosition    :   function(){  
  176.         var _this = this;  
  177.         var rn = Math.floor(Math.random()*(_this.Dm_H - 20));  
  178.         return rn;  
  179.     },  
  180.   
  181. }  
  182.   
  183. //sockey 服务  
  184. var SocketClass = {  
  185.     "wsServer":"ws://127.0.0.1:9502", //服务地址  
  186.     "websocket":"", //socket 对象  
  187.     init    :   function(){  
  188.         var _this = this;  
  189.   
  190.         //连接docket  
  191.         _this.socketServerInit();  
  192.     },  
  193.   
  194.     socketServerInit    :   function(){  
  195.         var _this = this;  
  196.         _this.websocket = new WebSocket(_this.wsServer);  
  197.   
  198.         //连接上socket  
  199.         _this.websocket.onopen = function (evt) {  
  200.             console.log("Connected to WebSocket server.");  
  201.         };  
  202.   
  203.         //socket 服务器关闭  
  204.         _this.websocket.onclose = function (evt) {  
  205.             alert("socket server closed");  
  206.             console.log("Disconnected");  
  207.         };  
  208.   
  209.         //接收socket服务器的广播数据  
  210.         _this.websocket.onmessage = function (evt) {  
  211.             console.log('Retrieved data from server: ' + evt.data);  
  212.   
  213.             //将接收到的弹幕数据调用addToDm方法 添加到弹幕区域  
  214.             DmClass.addToDm(evt.data);  
  215.         };  
  216.   
  217.         //连接错误  
  218.         _this.websocket.onerror = function (evt, e) {  
  219.             console.log('Error occured: ' + evt.data);  
  220.         };  
  221.     },  
  222.   
  223.   
  224. }  
  225.   
  226. //初始执行方法  
  227. $(function(){  
  228.     DmClass.init();  
  229.     SocketClass.init();  
  230. });  
  231.   
  232.   
  233. </script>  
  234. </html>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值