setInterval 0在IE8中不起作用

时间:2014-07-16 15:18:52

标签: javascript html css internet-explorer-8

我有一个方法changeColor,用于更新HTML中某些元素的CSS。 我也有一个控制这个的计时器,即:

var timer = setInterval(changeColor,0); 

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

var timer = setInterval(changeCalendarColor,1);

它有效。

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

setInterval函数需要调用函数和延迟(以毫秒为单位)。你不能有0毫秒的延迟;存在最小延迟(根据specs为4ms)。请查看documentation了解更多信息。

// 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 docs关于最小延迟的说法:

"实际上,4毫秒是由HTML5规范指定的,并且在2010年及之后发布的浏览器中保持一致。在(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)之前,嵌套超时的最小超时值为10毫秒。"


关于IE8的缓慢, setInterval" lag"可能是因为IE8太慢而无法跟上该功能试图做的事情。在每个时间间隔,调用该函数,但IE8队列正在被重载 - 结果是IE8无法跟上。增加延迟会掩盖我想象的这个问题。

正如瓦西里在this Google Code forum上所说的那样:

"如果前一个呼叫未结束,则触发新呼叫时,新呼叫将排队并等待其执行时间;这就是问题......(当队列增长时,计时器会变慢,性能会随着时间的推移而下降)"

请注意,这是IE8中低延迟的常见问题; check this post了解有关此特定问题的更多信息。


另外,关于setInterval延迟的快速注意事项是非活动标签偶尔会有不同的处理

"在(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)和Chrome 11中,超时被限制为在非活动标签中每秒不超过一次(1000毫秒)触发..."

有关详情,请参阅此related SO帖子。

相关问题