【问题标题】:Javascript countdown is getting faster after each run每次运行后,Javascript 倒计时越来越快
【发布时间】:2012-06-26 14:59:43
【问题描述】:
var i = 3400;

function progress() {
    i = 34000;
    window.setInterval(function () {
        i = i - 100;
        document.getElementById("progress").firstChild.data = i;
    }, 100);
}

这段代码越来越快。函数进度每 3 秒调用一次,但我无法更改它的调用方式,因为它是基于事件的。大约 10 次通话后,我变得消极!

【问题讨论】:

  • 这里的问题是你多次调用progress,这反过来又通过调用setInterval来启动多个计时器。这样,您每 3 秒生成一个间隔。所以 9 秒后你有 3 个间隔运行,15 秒后你有 5 个,依此类推。也许发布更多关于你想要达到的目标的细节。
  • 我有一些滑动图像,动画完成时调用方法。我希望有时间直到下一张图片滑动。
  • 一方面,您不会检查倒计时是否达到零,也许您应该这样做并停止间隔。其次,为什么不在倒计时结束时调用函数滑动?

标签: javascript firefox google-chrome time timer


【解决方案1】:

嗯....

不要使用setInterval

您可能想使用setTimeout

【讨论】:

    【解决方案2】:

    由于每 3 秒调用一次进度,因此您需要避免它重复创建新的间隔。使用clearTimeout 会在您调用进度时重置计时器。但是,如果不知道您究竟想要达到什么目标,就很难提供准确的答案。

    var timeout;
    
    function counter(count) {
    
        document.getElementById("progress").firstChild.data = count;
    
        if (count >= 0) {
            timeout = window.setTimeout(function() {
                counter(count-100);
            }, 100);
        }
    }
    
    function progress() {
        window.clearTimeout(timeout);
        counter(3400);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      var i = 3400;
      
      function progress() {
           i = i - 100;
           document.getElementById("progress").firstChild.data = i;
           window.setTimeout('progress();', 100);
      }
      

      【讨论】:

      • 间隔太短以至于下一个进度在第一个进度完成之前执行。尝试将进度时间增加到 1000
      猜你喜欢
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多