javascript - 为什么 fiddle 不工作并且在以下情况下有时间滞后?

标签 javascript jquery html css timer

我的fiddle链接如下:http://jsfiddle.net/FvYyS/2/

函数调用如下:

 load_timer('0', '6', '9', 0, '0', '', '0');

实际上我的问题是 fiddle 不工作。此代码的预期行为是计时器应逐秒减少并最终达到零(即,例如计时器应从 00:06:09 开始并在 00:00:00 结束)。但它在这里不起作用。该代码在我的应用程序中正常工作,但不知道为什么该代码无法正常工作。我在我的应用程序中注意到的另一个问题是计时器有时会滞后。任何人都可以在这方面帮助我吗?如果您需要任何进一步的信息,我会为您提供相同的信息。提前致谢。

最佳答案

您的代码具有以下结构:

 var counter = delay;
 function loop() {
     counter--;
     displayTime(delay, counter);
     if (counter > 0) {
         setTimeout( loop, 1000 );
     }
 }

2 件事:

  • displayTime() 执行需要时间:例如,如果需要 0.2 秒才能完成,则循环将每 1.2 秒(而不是每秒)执行一次
  • setTimeout( ..., 1000 ) 意思是“亲爱的 javascript 运行时,你能在 1 秒内运行我的代码吗?如果你有其他事情要做,我可以再等一会儿”
    您可以保证在 setTimeout 调用和您的 loop 执行之间至少 1 秒,但延迟可能会更长。

如果您想避免时间漂移,请检查每次迭代的真实时间:

var start = Date.now();
function loop() {
    var now = Date.now();
    var elapsedTime = now - start; //elapsed time in milliseconds
    displayTime(delay, elapsedTime);
    if (elapsedTime < delay) {
        setTimeout(loop, 1000);
    }
}

关于javascript - 为什么 fiddle 不工作并且在以下情况下有时间滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21597700/

相关文章:

html - 如何将 s router-outlet 的内容居中

带有 Ajax 的 PHP 数组 - 获取数据的正确方法?

javascript - 是否可以找到元素的父元素然后导航 DOM?

javascript - 使用 $ ("[property=value]").click(),我想要点击之间的延迟

javascript - 如何通过 JavaScript 使用引导选项卡激活提交表单的选项卡

javascript - Ember : Log model data in template from a nested route

javascript - Angular : ng-include, jQuery 无法工作,除非在 HTML 文件中

javascript - 将数据转换为 JSON 格式,其中字段为空格(单个或多个)和换行符分隔值

php - 具有 Jquery 自动完成功能的多个标签

javascript - react-html5video 是否与服务器端渲染兼容? (使用 next.js)