我使用以下代码在javascript中对一些进程进行动画处理:
var direction = $('#rightControl');
function animate()
{
if (hover) return;
if (!direction.is(':visible'))
{
if (direction.attr('id') == 'rightControl') direction = $('#leftControl');
else direction = $('#rightControl');
}
doMove(direction);
}
// Animate slider!
setInterval(animate, 2500);直到页面上存在元素div :每隔2.5秒调用一次animate()函数并移动我的#rightControl (在doMove中)。当#rightControl消失时,我将方向改为#leftControl,...
一切都很酷,但当页面在后台出现几分钟(例如4-5分钟)时,动画就会变得疯狂,并调用每个100-200ms。怎么了?
发布于 2011-07-27 05:03:28
我可以猜测的是,要么是setInterval()在别处被意外调用,要么是animate()被调用。
试试这个小提琴:http://jsfiddle.net/fXJbW/它只适用于animate()和setInterval()。问题出在代码的其余部分。
你可以做的另一件事是:
var timeout;
function animate()
{
// do stuff here
clearTimeout(timeout);
timeout=setTimeout(animate,2500);
}发布于 2011-07-27 05:05:55
嗯,setInterval只是每*秒向调用堆栈添加一些东西。如果有一些javascript被执行了几秒钟,事情可能会在调用堆栈上堆积起来。我猜,如果页面也在后台,就可能发生这种情况。检查它是否能与setTimeouts一起工作(SO1或函数调用来启动它,在函数的末尾使用1)。
https://stackoverflow.com/questions/6836497
复制相似问题