如何防止JQuery动画调用排队?

时间:2011-08-29 21:08:04

标签: javascript jquery

背景

我正在开发一个严重依赖于JQuery .animate()的项目,它偶尔会通过调用animate()的Socket.io接收外部更新。当窗口打开时,一切运行正常,动画调用可以异步运行。

问题

但是,当浏览器最小化或打开另一个选项卡然后重新打开时,应该在关闭时运行的所有动画排队并运行,因为它们已被接收。

以下是动画调用:

$(div).animate({
  'top': this.topPos(),
  'right': this.rightPos()
}, 100);

是否有一种简单的方法可以在animate()调用中添加选项或调用某个jquery函数,还是应该向应用程序添加适当的逻辑?

感谢。

3 个答案:

答案 0 :(得分:4)

通过true作为两个参数

来使用.stop(true,true)
.stop( [clearQueue], [jumpToEnd] )

clearQueue: A Boolean indicating whether to remove queued animation as well. Defaults to false.

jumpToEnd:  A Boolean indicating whether to complete the current animation immediately. Defaults to false.

在您的示例中,它将被应用为:

$(div).stop(true,true).animate({
  'top': this.topPos(),
  'right': this.rightPos()
}, 100);

答案 1 :(得分:2)

此行为是由requestAnimationFrame的引入引起的,该问题已于jQuery 1.6.3rc1(昨天发布)中删除。

另请参阅:http://bugs.jquery.com/ticket/9381

答案 2 :(得分:1)

在再次致电stop()之前,您可以在动画元素上调用animate()。像这样:

$(div).stop().animate({
  'top': this.topPos(),
  'right': this.rightPos()
}, 100);

它将停止排队并一次性解雇的动画。

请参阅here for details of stop()

希望这有帮助。