setTimeout 在 IE 中执行得很快
setTimeout is executing fast in IE
我正在尝试显示元素值的数字计数器动画,并且 setTimeout() 在 firefox
中作为指定时间工作,但由于某些原因在 IE
中它被快速调用。
下面是我的代码..
$('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 次)。
我也解决了这些问题,但其中 none 帮助了我。
one
two
是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 的计时系统的性质,该问题才很明显。您的代码取决于时间安排,但这些时间安排不能 得到保证。当您说 "do this every X milliseconds" 时,实际发生的是系统将 尝试 尽可能接近请求的时间来执行您的代码。但是,当有其他事件 运行 并且这些事件的执行使它们在您请求的时间内 运行 时,它可能无法执行此操作。
我正在尝试显示元素值的数字计数器动画,并且 setTimeout() 在 firefox
中作为指定时间工作,但由于某些原因在 IE
中它被快速调用。
下面是我的代码..
$('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 次)。
我也解决了这些问题,但其中 none 帮助了我。 one two
是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 的计时系统的性质,该问题才很明显。您的代码取决于时间安排,但这些时间安排不能 得到保证。当您说 "do this every X milliseconds" 时,实际发生的是系统将 尝试 尽可能接近请求的时间来执行您的代码。但是,当有其他事件 运行 并且这些事件的执行使它们在您请求的时间内 运行 时,它可能无法执行此操作。