2011-06-13 92 views
0

使用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);  
})(); 

回答

6

暂停和恢复是相当复杂的。你真正必须做的是:

  1. 启动一个进程并存储它的超时ID。
  2. 存储您运行该进程的时间。
  3. 在按键上,清除使用其超时标识的超时。
  4. 将未完成的时间存储在另一个变量中。
  5. 在接下来的按键,使用未完成时设置超时时间。
  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(); 
0

你要跟踪多少时间与你的计时器已经过去(在这里看到:javascript: pause setTimeout();),并调用clearTimeout上要停止一切活动,然后用剩下的时间留给再次致电的setTimeout无论什么事件都会被解雇。