代码之家  ›  专栏  ›  技术社区  ›  user113716

jquery如何完成异步动画?

  •  7
  • user113716  · 技术社区  · 14 年前

    …或者更具体地说,他们如何能够通过同步的javascript创建动画,而无需保留下一个javascript语句。

    只是好奇而已。他们用的是链条吗 setTimeout() ?如果是这样,它们是否设置得早,每一个都比前一个稍长一点,并且并行运行?或者它们是通过递归函数调用创建的,因此是串联运行的?

    还是完全不同?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Marius    14 年前

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

        2
  •  6
  •   aefxx    14 年前

    在第5534-5536行使用jquery 1.4.2:

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

    注意到 setInterval 对于jQuery的 tick 方法触发动画中的步骤。

        3
  •  1
  •   Pointy    14 年前

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

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

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