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);
}
}