页面最小化/离开后,Javascript setInterval“赶上”

时间:2011-06-29 15:32:05

标签: javascript setinterval

我有一个非常正常的setInterval电话(我认为):

var myInterval = setInterval("myFunction('passVar1', 'passedVar2')", 8000);

如果我在页面上它运行得很好,但是如果我让页面打开一段时间(或最小化它?),当我回来时,它就像它刚刚将所有myFunction调用构建到队列中并尝试通过他们所有人都很快“赶上”。然后,当它重新上升时,它再次以8秒的速度运行,就像它应该的那样。

我做错了吗?我现在正在使用Firefox 5 - 如果这与它有任何关系。思考? TIA。

2 个答案:

答案 0 :(得分:6)

一方面修复你的setInterval所以它不使用eval:

var myInterval = setInterval(function(){
                     myFunction('passVar1', 'passedVar2')
                 }, 8000);

其次,它取决于浏览器间隔的作用或不作用。


更新:

根据下面的评论和相关的聊天讨论,这是一个使用setTimeout的小提琴: http://jsfiddle.net/maniator/VR7WE/


更新:

根据进一步的讨论,结果证明这是jquery的动画

的问题

以下小提琴仅在完成动画时运行超时:http://jsfiddle.net/maniator/c869Z/5/

答案 1 :(得分:1)

您可以使用“setTimeout()”驱动自己的间隔机制,这将允许您的代码适应实际的浏览器行为。您可能需要做一些事情来跟踪“目标”时间,当您错过目标时,下一个超时将相应地小于标称延迟。这样,即使您的标称延迟为100毫秒且浏览器每隔1000毫秒只给您一次控制,您在任何时候都只有一个待处理的超时。当焦点返回时,您的代码会注意到事情恢复正常并且几乎自动恢复更高频率的活动。