Repeating setTimeout

前端 未结 7 849
太阳男子
太阳男子 2020-12-15 15:56

I am trying to repeat setTimeout every 10 seconds. I know that setTimeout by default only waits and then performs an action one time. How can I rep

相关标签:
7条回答
  • 2020-12-15 16:30

    Here is a function using setTimeout that tried to call itself as close as it can to a regular interval. If you watch the output, you can see the time drifting and being reset.

    <script type="text/javascript">
    
    function Timer(fn, interval) {
      this.fn = fn;
      this.interval = interval;
    }
    
    Timer.prototype.run = function() {
    
        var timer = this;
        var timeDiff = this.interval;
        var now = new Date();  // Date.now is not supported by IE 8
        var newInterval;
    
        // Only run if all is good
        if (typeof timer.interval != 'undefined' && timer.fn) {
    
          // Don't do this on the first run
          if (timer.lastTime) {
            timeDiff = now - timer.lastTime;
          }
          timer.lastTime = now;
    
          // Adjust the interval
          newInterval = 2 * timer.interval - timeDiff;
    
          // Do it
          timer.fn();
    
          // Call function again, setting its this correctly
          timer.timeout = setTimeout(function(){timer.run()}, newInterval);
      }
    }
    
    
    var t = new Timer(function() {
      var d = new Date();
      document.getElementById('msg').innerHTML = d + ' : ' + d.getMilliseconds();
    }, 1000);
    
    
    window.onload = function() {
      t.run();
    };
    </script>
    
    <span id="msg"></span>
    
    0 讨论(0)
提交回复
热议问题