如何在按下按键时暂停/播放Javascript循环?
问题描述:
使用JavaScript/jQuery的,我怎么可以暂停(或恢复)以下loop按下“P”键时?如何在按下按键时暂停/播放Javascript循环?
(function() {
var arr = [...],
len = arr.length;
(function doProcess(i) {
if (i) {
console.log(len - i);
/* do something with arr[len - i] */
setTimeout(function() { doProcess(--i); }, 20000);
}
})(len);
})();
答
暂停和恢复是相当复杂的。你真正必须做的是:
- 启动一个进程并存储它的超时ID。
- 存储您运行该进程的时间。
- 在按键上,清除使用其超时标识的超时。
- 将未完成的时间存储在另一个变量中。
- 在接下来的按键,使用未完成时设置超时时间。
- 设置以下超时原来的预期延迟。
这里是a more generalized jsFiddle example我鞭打。
var counterOn = true;
var delay = 3000;
var lastRun;
var tempDelay;
var intervalId;
function decrementCounter() {
// do something
lastRun = new Date();
timeoutId = setTimeout(decrementCounter, delay);
}
function toggleCounter() {
var curTime = new Date();
counterOn = !counterOn;
if (counterOn) {
lastRun = curTime.valueOf() + tempDelay - delay;
timeoutId = setTimeout(decrementCounter, tempDelay);
} else {
clearTimeout(timeoutId);
tempDelay = delay - (curTime.valueOf() - lastRun);
}
}
$(document).keydown(function(e) {
if (e.which === 80) {
toggleCounter();
}
});
decrementCounter();
答
你要跟踪多少时间与你的计时器已经过去(在这里看到:javascript: pause setTimeout();),并调用clearTimeout上要停止一切活动,然后用剩下的时间留给再次致电的setTimeout无论什么事件都会被解雇。