背景
我正在开发一个严重依赖于JQuery .animate()的项目,它偶尔会通过调用animate()的Socket.io接收外部更新。当窗口打开时,一切运行正常,动画调用可以异步运行。
问题
但是,当浏览器最小化或打开另一个选项卡然后重新打开时,应该在关闭时运行的所有动画排队并运行,因为它们已被接收。
以下是动画调用:
$(div).animate({
'top': this.topPos(),
'right': this.rightPos()
}, 100);
是否有一种简单的方法可以在animate()调用中添加选项或调用某个jquery函数,还是应该向应用程序添加适当的逻辑?
感谢。
答案 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(昨天发布)中删除。
答案 2 :(得分:1)
在再次致电stop()
之前,您可以在动画元素上调用animate()
。像这样:
$(div).stop().animate({
'top': this.topPos(),
'right': this.rightPos()
}, 100);
它将停止排队并一次性解雇的动画。
希望这有帮助。