我有一个非常正常的setInterval
电话(我认为):
var myInterval = setInterval("myFunction('passVar1', 'passedVar2')", 8000);
如果我在页面上它运行得很好,但是如果我让页面打开一段时间(或最小化它?),当我回来时,它就像它刚刚将所有myFunction调用构建到队列中并尝试通过他们所有人都很快“赶上”。然后,当它重新上升时,它再次以8秒的速度运行,就像它应该的那样。
我做错了吗?我现在正在使用Firefox 5 - 如果这与它有任何关系。思考? TIA。
答案 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毫秒只给您一次控制,您在任何时候都只有一个待处理的超时。当焦点返回时,您的代码会注意到事情恢复正常并且几乎自动恢复更高频率的活动。