如何在按下某个键时暂停/播放Javascript循环?

时间:2011-06-13 03:31:01

标签: javascript jquery loops keyboard

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

2 个答案:

答案 0 :(得分:6)

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

  1. 启动进程并存储其超时ID。
  2. 存储运行该过程的时间。
  3. 在按键上,使用超时ID清除超时。
  4. 将未完成的时间存储在另一个变量中。
  5. 在下一个按键上,使用未完成的时间设置超时。
  6. 将以下超时设置为原始预期延迟。
  7. 这是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,剩余时间一次无论什么事情取消暂停再次被解雇。