使用Javascript / jQuery,当按下“P”键时,如何暂停(或恢复)以下loop?
(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);
})();
答案 0 :(得分:6)
暂停和恢复相当复杂。你真正需要做的是:
这是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();
答案 1 :(得分:0)
您需要跟踪计时器已经过了多长时间(请参阅此处:javascript: pause setTimeout();)并在您想要停止的任何事件上调用clearTimeout,然后再次调用setTimeout,剩余时间一次无论什么事情取消暂停再次被解雇。