javascript - setInterval 0 在 IE8 中不起作用

标签 javascript html css internet-explorer-8

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

var timer = setInterval(changeColor,0); 

我面临的问题是使用 0 的时间间隔会导致 changeColor 方法未运行,但是如果我对其进行一些最小的更改,例如:

var timer = setInterval(changeCalendarColor,1);

有效。

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

关于如何解决这个问题有什么想法吗?

谢谢。

最佳答案

setInterval 函数需要调用一个函数和以毫秒为单位的延迟。你不能有 0 毫秒的延迟;存在最小延迟(根据 specs 为 4 毫秒)。看看 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 的内容谈谈最小延迟:

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


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

正如 Vasile 在 this Google Code forum 上所说的那样:

“如果前一个调用未结束,则触发新调用时,新调用将排队等待执行时间;这就是问题所在……(计时器会减慢当队列增长并且性能会随着时间下降时)”

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


此外,关于 setInterval 延迟需要快速注意的一点是,不活动的标签偶尔会受到不同对待:

“在(Firefox 5.0/Thunderbird 5.0/SeaMonkey 2.2)和 Chrome 11 中,超时被限制为在非事件选项卡中每秒触发一次(1000 毫秒)...”

查看此 related SO发布更多内容。

关于javascript - setInterval 0 在 IE8 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24784509/

相关文章:

asp.net-mvc - 如何使用 Razor 引擎在 mvc5 中显示未排序的图像?

javascript - 使用 moment.js 进行日期/时间转换

php - 动态加载的缩略图显示其他缩略图的全尺寸图像而不是它自己的(使用 javascript 悬停效果)

javascript - 平均应用程序 : Can't find theme in Angular material

html - 图片总是在容器中间

html - 悬停时文本更改为图像

jquery - 如何添加类(class)并在完成后获得结果

javascript - 如何通过算法为 table 中央的圆形着色?

javascript - 带有附件的 Office.context.mailbox.item.displayReplyAllForm 不工作 outlook.live.com 和 outlook api 给出内部服务器错误

HTML 5 视频标签不适用于任何浏览器