jQuery如何完成其​​异步动画?

时间:2010-03-03 13:20:24

标签: javascript jquery animation asynchronous

...或者更具体地说,他们如何通过javascript创建动画,这是同步的,而不会阻止下一个javascript语句。

这只是一种好奇心。他们是否使用setTimeout()链?如果是这样,它们是否提前设置,每个设置的持续时间比前一个稍长,并且并行运行?或者它们是通过递归函数调用创建的,因此是串联运行的?

或者是完全不同的东西?

3 个答案:

答案 0 :(得分:6)

有一个名为setInterval()的setTimeout()的替代方法,它将定期调用您作为参数传递的函数。调用setInterval将返回一个值,该值可以传递给clearInterval以阻止函数被调用。

答案 1 :(得分:6)

使用jQuery 1.4.2第5534 - 5536行:

if ( t() && jQuery.timers.push(t) && !timerId ) {
    timerId = setInterval(jQuery.fx.tick, 13);
}

注意jQuery setInterval方法的tick,它触发动画中的一个步骤。

答案 2 :(得分:1)

对setTimeout的链式调用并不是真正的“递归”。如果一个setTimeout函数在被调用时设置另一个超时,它自己作为处理程序,原始调用将在新超时发生时消失。

使用setTimeout而不是setInterval(对我而言)通常更灵活,因为它允许定时代码适应(并可能取消)自身。一般模式是围绕setTimout调用设置一个闭包,以便定时进程所需的数据(动画,如果你正在做的那样)可用并与应用程序的其余部分隔离。然后在初始运行时启动超时。

在超时处理程序中,“arguments.callee”可用于引用自身并重置后续“帧”的超时。