HTML5web-Worker使用

HTML5 DAY06:
  * Web Worker
    * 基本内容
      * 单线程与多线程
      * Worker可以模拟多线程的效果
      * 定义 - 运行在后台的javascript
      * 注意 - 不能使用DOM
    * 在Worker中只能使用javascript中的ECMA
      * 目前主流浏览器都支持Worker,除IE8之前
    * Worker提供API
      * 检测当前浏览器是否支持Worker
        if( typeof(Worker) !== "undefined" ){
          说明当前浏览器支持Web Worker
        }else{
          说明当前浏览器不支持Web Worker
        }
    * 创建WebWorker对象
      new Worker(worker文件)
    * Worker对象
    * onmessage事件
      * postMessage()方法
      * terminate()方法

 1 <!DOCTYPE html>
 2 <html>
 3  <head>
 4   <title>计时器案例</title>
 5   <meta charset="utf-8" />
 6  </head>
 7 
 8  <body>
 9   <input id="start" type="button" value="开始计时">
10   <input id="stop" type="button" value="结束计时">
11   <br>
12   <div id="showTime"></div>
13   <script>
14     /*
15     // 1. 获取两个button按钮元素
16     var start = document.getElementById("start");
17     var stop = document.getElementById("stop");
18     // 2. 分别绑定click事件
19     var time = 0;
20     start.onclick = addTime;
21     function addTime(){
22         var showTime = document.getElementById("showTime");
23         showTime.innerHTML = "<h3>"+time+"</h3>";
24 
25         time++;
26 
27         t = setTimeout("addTime()",1000);
28     }
29     stop.onclick = function(){
30         clearTimeout(t);
31     }
32     */
33     /*
34      * setTimeout() - 定时器
35      * setInteval() - 周期性(- 10:25 练习)
36      */
37     var start = document.getElementById("start");
38     var stop = document.getElementById("stop");
39     var time = 0;
40     start.onclick = function(){
41         setInterval(function(){
42             var showTime = document.getElementById("showTime");
43             showTime.innerHTML = "<h3>"+time+"</h3>";
44 
45             time++;
46 
47         },1000);
48     }
49   </script>
50  </body>
51 </html>
 1 <!DOCTYPE html>
 2 <html>
 3  <head>
 4   <title>使用WebWorker实现计数器</title>
 5   <meta charset="utf-8" />
 6  </head>
 7 
 8  <body>
 9   <input id="start" type="button" value="开始计时">
10   <input id="stop" type="button" value="结束计时">
11   <br>
12   <div id="showTime"></div>
13   <script>
14     var worker;
15     var start = document.getElementById("start");
16     start.onclick = function(){
17         // 使用WebWorker的逻辑实现
18         /*
19          * 1. 创建Web Worker对象
20          *  new Worker(worker文件的路径)
21          *  * 一个Worker对象 - 一个worker文件
22          */
23         worker = new Worker("mytime.js");
24         /*
25          * 2. 为Worker对象绑定onmessage事件
26          *  * 该事件的处理函数
27          *    * 通过event事件对象的data属性
28          *      * 可以获取postMessage()方法传递的数据
29          */
30         worker.onmessage = function(event){
31             var time = event.data;
32             var div = document.getElementById("showTime");
33             div.innerHTML = "<h3>"+time+"</h3>";
34         }
35     }
36     var stop = document.getElementById("stop");
37     stop.onclick = function(){
38         worker.terminate();
39     }
40   </script>
41  </body>
42 </html>
 1 <!DOCTYPE html>
 2 <html>
 3  <head>
 4   <title>Worker实现售票系统</title>
 5   <meta charset="utf-8" />
 6   <style>
 7     div {
 8         width : 150px;
 9         height : 150px;
10         border : solid 1px black;
11         float : left;
12         margin-right : 10px;
13     }
14     .hasTicket {
15         width : 150px;
16         height : 150px;
17         border : solid 1px black;
18         float : left;
19         margin-right : 10px;
20         background : green;
21     }
22     .noTicket {
23         width : 150px;
24         height : 150px;
25         border : solid 1px black;
26         float : left;
27         margin-right : 10px;
28         background : red;
29     }
30   </style>
31  </head>
32 
33  <body align="center">
34   <h1>售票系统</h1>
35   <div id="win0">售票窗口 1</div>
36   <div id="win1">售票窗口 2</div>
37   <div id="win2">售票窗口 3</div>
38   <div id="win3">售票窗口 4</div>
39   <div id="win4">售票窗口 5</div>
40   <br>
41   <input type="button" id="btn" value="抢票">
42   <script>
43     var workers = [];
44     // 1. 获取页面button按钮
45     var btn = document.getElementById("btn");
46     // 2. 为button按钮绑定click事件
47     btn.onclick = function(){
48         /*
49          * 创建5个worker对象
50          * * 检测当前浏览器是否支持worker
51          *   * 支持 - 创建worker对象
52          */
53         if(typeof(Worker) !== "undefined"){
54             for(var i=0;i<5;i++){
55                 var worker = new Worker("getticket.js");
56                 worker.onmessage = getmessage;
57                 workers.push(worker);
58             }
59         }
60     }
61     function getmessage(event){
62         // event事件对象 - target属性(绑定该事件的对象)
63         var w = event.target;
64         // 从数组中获取当前worker对象的角标
65         var index = workers.indexOf(w);
66         // 根据角标,获取对应的窗口
67         var win = document.getElementById("win"+index);
68         // event.data - 0或1
69         if(event.data == 1){//有票
70             win.className = "hasTicket";
71         }else{//无票
72             win.className = "noTicket";
73         }
74     }
75   </script>
76  </body>
77 </html>
posted @ 2017-08-16 21:44  青涩的柠檬酸  阅读(374)  评论(3编辑  收藏  举报