Implementing a pause and resume mechanism for javascript loop execution

前端 未结 2 1793
逝去的感伤
逝去的感伤 2020-12-10 21:34

I\'m trying to provide a pause and resume functionality to a loop with recursive calls. I\'m using \"setTimeout\" and \"clearTimeout\" functions for this...

When a u

2条回答
  •  孤城傲影
    2020-12-10 21:43

    Back in 2012 I wrote a snippet of code for delta timing in JavaScript, which uses setTimeout and has start and stop functions: https://gist.github.com/aaditmshah/2056987

    See the demo:

    var button = document.querySelector("button");
    var div = document.querySelector("div");
    
    var running = false;
    
    var number = 1;
    
    var timer = new DeltaTimer(function () {
      div.innerHTML = number++;
    }, 1000);
    
    button.addEventListener("click", function () {
      if (running) {
        timer.stop();
        button.innerHTML = "Start";
        running = false;
      } else {
        timer.start();
        button.innerHTML = "Stop";
        running = true;
      }
    });
    
    function DeltaTimer(render, interval) {
        var timeout;
        var lastTime;
    
        this.start = start;
        this.stop = stop;
    
        function start() {
            timeout = setTimeout(loop, 0);
            lastTime = Date.now();
            return lastTime;
        }
    
        function stop() {
            clearTimeout(timeout);
            return lastTime;
        }
    
        function loop() {
            var thisTime = Date.now();
            var deltaTime = thisTime - lastTime;
            var delay = Math.max(interval - deltaTime, 0);
            timeout = setTimeout(loop, delay);
            lastTime = thisTime + delay;
            render(thisTime);
        }
    }
    
    

    Hope that helps.

提交回复
热议问题