首页 web前端 H5教程 详解HTML5中的WebSocket及实例代码

详解HTML5中的WebSocket及实例代码

May 26, 2017 pm 03:30 PM

        在WebSocket API中,浏览器和服务器只需要做一个握手动作,然后,浏览器和服务器之间就形成一条快速通道,两者之间就可以直接进行数据传送,这一个功能可以应用到“字幕”,自己做了一个demo,废话不说了,直接贴代码:

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta charset="utf-8">
  5     <title>弹幕</title>
  6 </head>
  7 <script type="text/javascript" src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
  8 <style type="text/css">
  9     #Barrage{
 10         width:800px;
 11         height:400px;
 12         margin:0 auto;
 13         border:1px solid #000;
 14     }
 15     #Video1{
 16         box-shadow: 10px 5px 5px black;
 17         display: block;
 18     }
 19 </style>
 20 <script type="text/javascript">
 21 
 22     function vidplay() {
 23        var video = document.getElementById("Video1");
 24        var button = document.getElementById("play");
 25        if (video.paused) {
 26           video.play();
 27           button.innerHTML = "||";
 28        } else {
 29           video.pause();
 30           button.innerHTML = ">";
 31        }
 32     }
 33 
 34     function restart() {
 35         var video = document.getElementById("Video1");
 36         video.currentTime = 0;
 37     }
 38 
 39     function skip(value) {
 40         var video = document.getElementById("Video1");
 41         video.currentTime += value;
 42     }  
 43 
 44     function makeBig(){
 45         var video = document.getElementById("Video1");
 46         video.width = 600;
 47     }    
 48 </script>
 49 
 50 <body>
 51     <p id="Barrage">
 52         <video id="Video1" autoplay loop>
 53             <source src="http://www.runoob.com/try/demo_source/mov_bbb.mp4" type="video/mp4">
 54             <source src="http://www.runoob.com/try/demo_source/mov_bbb.ogg" type="video/ogg"> 
 55         </video>
 56         <p id="buttonbar" style="margin-left: 50px;margin-top: 20px">
 57             <button id="restart" onclick="restart();">重播</button> 
 58             <button id="rew" onclick="skip(-3)">&lt;&lt;</button>
 59             <button id="play" onclick="vidplay()">暂停</button>
 60             <button id="fastFwd" onclick="skip(3)">&gt;&gt;</button>
 61             <button onclick="makeBig()">放大</button>
 62         </p>  
 63     </p>
 64 </body>
 65 <script type="text/javascript">
 66             var that = this;
 67             //舞台是全局变量
 68             var stage = $(&#39;#Barrage&#39;);
 69             //弹幕的总时间,这个是值得思考的问题,根据业务而已,这个不应该是一开始写死,因为是动态的弹幕,不过这里是为了测试方便,后面会修改
 70             var totalTime = 9000;
 71             //检测时间间隔
 72             var checkTime = 1000;
 73             //总飞幕数
 74             var playCount = Math.ceil(totalTime / checkTime);
 75 
 76      var  messages=[{
 77                     //从何时开始
 78                     time:0,
 79                     //经过的时间
 80                     duration:4292,
 81                     //舞台偏移的高度
 82                     top:10,
 83                     //弹幕文字大小
 84                     size:16,
 85                     //弹幕颜色
 86                     color:&#39;#000&#39;,
 87                     //内容
 88                     text:&#39;前方高能注意&#39;
 89                 },{
 90                     //从何时开始
 91                     time:100,
 92                     //经过的时间
 93                     duration:6192,
 94                     //舞台偏移的高度
 95                     top:100,
 96                     //弹幕文字大小
 97                     size:14,
 98                     //弹幕颜色
 99                     color:&#39;green&#39;,
100                     //内容
101                     text:&#39;我准备追上前面那条&#39;,
102                 },{
103                     //从何时开始
104                     time:130,
105                     //经过的时间
106                     duration:4192,
107                     //舞台偏移的高度
108                     top:90,
109                     //弹幕文字大小
110                     size:16,
111                     //弹幕颜色
112                     color:&#39;red&#39;,
113                     //内容
114                     text:&#39;遮住遮住遮住。。&#39;,
115                 },{
116                     //从何时开始
117                     time:1000,
118                     //经过的时间
119                     duration:6992,
120                     //舞台偏移的高度
121                     top:67,
122                     //弹幕文字大小
123                     size:20,
124                     //弹幕颜色
125                     color:&#39;blue&#39;,
126                     //内容
127                     text:&#39;临水照影Testing....~~&#39;,
128                 }];
129 
130             //构造一个单独的弹幕
131             var BarrageItem = function(config){
132                 //保存配置
133                 this.config = config;
134                 //设置样式,这里的样式指的是一个容器,它指包含了单个弹幕的基础样式配置的p
135                 this.outward = this.mySelf();
136                 //准备弹出去,先隐藏再加入到舞台,后面正式获取配置参数时会把一些样式修改。
137                 this.outward.hide().appendTo(stage);
138             }
139 
140             //单个弹幕样式,从config中提取配置
141             BarrageItem.prototype.mySelf = function(){
142             //把配置中的样式写入
143                 var outward = $(&#39;<p style="min-width:400px;font-size:&#39;+this.config.size +&#39;px;color:&#39;+this.config.color+&#39;;">&#39;+this.config.text+&#39;</p>&#39;);
144             return outward;
145             }
146 
147             //定义弹的过程,这是弹幕的核心,而且一些高级扩展也是在这里添加
148             
149             BarrageItem.prototype.move = function(){
150                 var that = this;
151                 var outward = that.outward;
152                 var myWidth = outward.width();
153                 //用jq自带animate来让它运动
154                 outward.animate({
155                     left: -myWidth
156                 },that.config.duration,&#39;swing&#39;,function(){
157                     outward.hide(); //弹完我就藏起来
158                 });
159             }
160 
161             //开始弹弹弹
162 
163             BarrageItem.prototype.start = function(){
164                 var that = this;
165             var outward = that.outward; //这里引用的还是原型中的那个outward
166                 //开始之前先隐藏自己
167                 outward.css({
168                     position: &#39;absolute&#39;,
169                     left: stage.width() + &#39;px&#39;, //隐藏在右侧
170                     top:that.config.top || 0 , //如果有定义高度就从配置中取,否则就置顶
171                     zIndex:10,//展示到前列
172                     display: &#39;block&#39;
173                 });
174 
175                 //延迟时间由配置的开始时间减去队列中该弹幕所处的位置所需要等的位置,而这里的队列位置是由驱使者diretor分配的,事实上根据我的调试发现这种写法只能近似于模仿顺序,然而如果两个播放时间间隔不大将会同时出发,不过这个对于普通体验影响不大。后期如果有强需求可能需要把整个逻辑改掉
176                 var delayTime = that.config.time - (that.config.queue - 1) * checkTime;
177                 setTimeout(function(){
178                     that.move();
179                 },delayTime);
180 
181             }
182 
183             //设置一个支持事件机制的对象,也就是弹幕们的驱使者,它来驱使弹幕弹弹弹
184             
185             var diretor = $({});//创建一个空的对象
186 
187             //对舞台进行样式设置,其实可以直接写到css里面
188             stage.css({
189                 position:&#39;relative&#39;,
190                 overflow:&#39;hidden&#39;
191             });
192             
193             //批量读取写好的弹幕配置内容,然而后期是需要动态弹幕,打算采用websocket来分配因此这里也只是为了测试而简写
194             
195             //that.messages 是配合vue的data来设置的,如果是为了在单个文件中引用,去掉that,把message写在该js里面
196 
197             $.each(messages,function(k,config){
198                 //确认弹出的时间
199                 var queue = Math.ceil(config.time / checkTime);
200                 config.queue = queue;
201 
202                 //新建一个对象给它配置
203                 var go = new BarrageItem(config);
204                 //驱动者监听驱使动作
205                 diretor.on(queue+&#39;start&#39;,function(){
206                     go.start();
207                 })
208             });
209 
210             var currentQueue = 0;
211             setInterval(function(){
212                 //从队列中取第n个开始谈
213                 diretor.trigger(currentQueue+&#39;start&#39;);
214                 //如果都弹完了 循环来一遍
215                 if (currentQueue === playCount) {
216                     currentQueue = 0;
217                 }else{
218                     currentQueue++;
219                 }
220 
221             },checkTime);
222 </script>
223 
224 
225 
226 </html>
登录后复制

 效果展示:

HTML5 WebSocket0

可以把代码copy出来,点击重播、暂停、快进、放大等功能试试效果,后续结合webSocket 的即时弹幕也会有所展示!

下班喽!!!!拜拜~~

【相关推荐】

1. PHP HTML5 websocket怎么初始化,老是失败

2. 带你认识HTML5中的WebSocket

3. 解析HTML5中的标签嵌套规则

以上是详解HTML5中的WebSocket及实例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

HTML 中的表格边框 HTML 中的表格边框 Sep 04, 2024 pm 04:49 PM

HTML 表格边框指南。在这里,我们以 HTML 中的表格边框为例,讨论定义表格边框的多种方法。

HTML 中的嵌套表 HTML 中的嵌套表 Sep 04, 2024 pm 04:49 PM

这是 HTML 中嵌套表的指南。这里我们讨论如何在表中创建表以及相应的示例。

HTML 左边距 HTML 左边距 Sep 04, 2024 pm 04:48 PM

HTML 左边距指南。在这里,我们讨论 HTML margin-left 的简要概述及其示例及其代码实现。

HTML 表格布局 HTML 表格布局 Sep 04, 2024 pm 04:54 PM

HTML 表格布局指南。在这里,我们详细讨论 HTML 表格布局的值以及示例和输出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在这里我们还分别讨论了 HTML 有序列表和类型的介绍以及它们的示例

HTML 输入占位符 HTML 输入占位符 Sep 04, 2024 pm 04:54 PM

HTML 输入占位符指南。在这里,我们讨论 HTML 输入占位符的示例以及代码和输出。

在 HTML 中移动文本 在 HTML 中移动文本 Sep 04, 2024 pm 04:45 PM

HTML 中的文本移动指南。在这里我们讨论一下marquee标签如何使用语法和实现示例。

HTML onclick 按钮 HTML onclick 按钮 Sep 04, 2024 pm 04:49 PM

HTML onclick 按钮指南。这里我们分别讨论它们的介绍、工作原理、示例以及各个事件中的onclick事件。

See all articles