setTimeout在IE中执行得很快

setTimeout is executing fast in IE

本文关键字:很快 执行 IE setTimeout      更新时间:2023-09-26

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

Jsfidle代码

下面是我的代码。。

$('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次)。

我也讨论过这些问题,但都没有帮助。一个两个

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

我猜这是一个竞赛条件,并建议这可能是实现相同目标的更好方法:

$('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毫秒执行一次"时,实际发生的情况是系统会尝试在尽可能接近请求的时间执行你的代码。但是,当有其他事件要运行,并且这些事件的执行使它们在您请求的时间内运行时,它可能无法做到这一点。