现代jQuery动画中的setInterval()和setTimeout()是不是很糟糕?

时间:2011-08-22 00:49:04

标签: javascript jquery animation

我在jQuery 1.6的动画中遇到了一些问题。我用jQuery 1.5解决了它。

在我的项目中,我使用setInterval()制作自定义徽标滑块。动画一两个即时(不是同时)激发。当我在页面上时,一切顺利,但是当我继续其他标签并且回归(在一分钟之后,两个左右)到我的页面项目时,一切都变得疯狂......

好的,所以我得到了一个使用Queue()的答案。我可以用这种方法实现同样的目的吗?

我已经预订了Manning jQuery in Action,并且没有任何关于使用Queue()立即激发动画的内容。

Link to Jsfiddle

引用一些答案:

  

由于requestAnimationFrame()的性质,您不应该使用setInterval或setTimeout循环对动画进行排队。

1 个答案:

答案 0 :(得分:12)

动画的一般 setInterval == BAD setTimeout == GOOD

setInterval 会尝试播放追赶,因为 nnnnnn 声明:

  某些浏览器可能会对所有内容进行排队,然后尝试赶上   标签再次获得焦点

循环animate()的最佳方法是通过递归调用,例如:

var myTimeout;

var myAnimation = function () {

    $('#myID').animate({
        [propertyKey]:[propertyValue]
    }, 5000, function() {
        myTimeout = setTimeOut(myAnimation, 1000);
    });
}

请注意 myTimeout 如何超出 myAnnimation 的范围,以便能够停止动画

clearTimeout(myTimeout);

您可以连接到 window.unload 事件。