setTimeout在IE中快速执行

时间:2015-02-09 07:18:27

标签: javascript internet-explorer firefox settimeout setinterval

我正在尝试使用数字计数器动画来显示元素的值,而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中的问题还是我的代码本身有问题?

1 个答案:

答案 0 :(得分: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的计时系统的性质而显而易见。您的代码取决于时间,但这些时间保证。当你说&#34;每隔X毫秒执行一次&#34;时,实际发生的是系统将尝试以尽可能接近请求的时间执行代码。但是,当有其他事件要运行时,它可能无法执行此操作,并且这些事件的执行使它们在您请求的时间内运行。