Page 38 - JavaScript修炼之道
P. 38

任务11  模拟后台处理           25


                   调度及停止代码的执行

                   利用定时器模拟后台处理需要两个核心方法:

                   var handle = window.setTimeout(callback, intervalInMs);
                   window.clearTimeout(handle);

                   让用户切换后台处理

                   本书的在线源码库(dom/background.js)中包含了一个完整的演示。
                   下面是这个例子中的关键代码:

                    dom/background.js

                   var CHUNK_INTERVAL = 25 ; //单位为毫秒
                   var running = false, progress = 0, processTimer;

                   function runChunk(){
                     window.clearTimeout(processTimer);
                     processTimer = null;
                     if (!running) return;
                    // 模拟任务的各个步骤
                     for (var i = 0; i < 10000; i += (Math.random() * 5).round())
                      ;
                    ++progress;
                    updateUI(); //用来更新一个进度条,请到在线源码库了解更多的细节
                     if(progress < 100){
                       processTimer = window.setTimeout(runChunk, CHUNK_INTERVAL);
                    } else {
                       progress = 0, running = false;
                    }
                   }

                   function toggleProcessing (){
                     running = !running;
                     if (running) {
                        processTimer = window.setTimeout(runChunk, CHUNK_INTERVAL);
                    }
                   }
   33   34   35   36   37   38   39   40   41   42   43