繁体   English   中英

setInterval 0在IE8中不起作用

[英]setInterval 0 does not work in IE8

我有一个changeColor方法,可以更新HTML中某些元素上的CSS。 我也有一个计时器来控制此应用,即:

var timer = setInterval(changeColor,0); 

我面临的问题是使用0的时间间隔导致changeColor方法无法运行,但是,如果我将其更改为最小值,例如:

var timer = setInterval(changeCalendarColor,1);

有用。

现在,我很乐意使用此功能,但是在IE8中,这会导致颜色出现轻微延迟。

有关如何解决此问题的任何想法?

谢谢。

setInterval函数接受一个函数,并以毫秒为单位进行延迟。 您不能将延迟设为0毫秒; 有一个最小的延迟 (根据规格为4ms)。 请查看文档以获取更多信息。

// To call a function every second:
var timer = setInterval(myFunction, 1000); 

// This doesn't throw an error as the 0 is being overridden by a default minimum:
var timer = setInterval(myFunction, 0); 

如果要首先调用该函数,然后每秒钟调用一次,则应在设置间隔时调用该函数:

var timer = setInterval(myFunction, 1000); 
myFunction();

这是Mozilla文档所说的最小延迟

“实际上,HTML5规范指定了4ms,并且在2010年及以后发布的浏览器中是4ms。在(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)之前,嵌套超时的最小超时值为10ms。”


关于IE8的慢度, setInterval“滞后”可能是由于IE8太慢而无法跟上该函数试图执行的操作 在每个时间间隔,都会调用该函数,但IE8导致队列被超载,以至IE8无法跟上。 延迟的增加会掩盖我想像的这个问题。

正如Vasile在此Google Code论坛上所说:

“如果先前的通话没有结束而触发了一个新的通话,那么新的通话就会排队,并等待执行时间;这就是问题所在……(当队列变大时,计时器会变慢,并且性能会随着时间而下降)”

请注意,这是IE8中低延迟的常见问题。 有关此特定问题的更多信息请查看此帖子


另外,需要注意的有关setInterval延迟的快速提示是, 不活动的选项卡有时会被不同地对待

“在(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)和Chrome 11中,超时限制为在不活动的选项卡中触发频率不超过每秒一次(1000ms)。

有关更多信息,请参见此相关SO帖子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM