【问题标题】:setTimeout is executing fast in IEsetTimeout 在 IE 中执行得很快
【发布时间】:2015-02-09 07:18:27
【问题描述】:

我正在尝试使用数字计数器动画来显示元素的值,并且 setTimeout() 在firefox 中作为指定时间工作,但由于某种原因在IE 中它被快速调用。

Jsfiddle Code

下面是我的代码..

$('document').ready(function() {
  var i=1,data=10;
  my_int=setInterval(
     function () { 
        if(i<=data)
          $('p').text(i++);
        else
          $('body').append("overflow"); }
     ,64);
setTimeout(function() { $('body').append("done");clearInterval(my_int); },64*data);
});

快速我的意思是IE setInterval() 执行了 8 次,然后它调用了超时函数(虽然它应该循环 10 次)。

我也经历了这些问题,但没有一个有帮助。 one two

这是IE 的问题还是我的代码本身的问题??

【问题讨论】:

  • 将代码放入您的问题中。
  • @epascarello .. 完成 ..添加代码
  • 为什么这个问题是-1..??因为这个我不能问任何其他问题..

标签: javascript internet-explorer firefox settimeout setinterval


【解决方案1】:

我猜测这是一个竞争条件,并建议这也许是实现相同目标的更好方法:

$('document').ready(function() {
    var i = 1, data = 10;
    my_int = setInterval(function () {
        if (i <= data) {
            $('p').text(i++);
        }
        else {
            $('body').append("overflow").append("done");
            clearInterval(my_int);
        }
    }, 64);
});

要回答您的实际问题,由于 IE 计时系统的性质,您的代码可能存在问题。您的代码取决于时间,但这些时间是保证的。当您说“每 X 毫秒执行一次”时,实际发生的情况是系统将尝试尽可能接近请求的时间执行您的代码。但是,当有其他事件要运行并且这些事件的执行会使它们超过您请求的时间时,它可能无法执行此操作。

【讨论】:

  • 完美..关于答案的最好的事情是对比赛条件的解释..谢谢@Tom.. :) 只是出于对this question 的好奇,不会有同样的问题竞争条件 ..
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2019-02-10
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2011-12-06
相关资源
最近更新 更多