Javascript 如何防止JQuery动画调用排队?
背景 我正在处理一个严重依赖JQuery.animate()的项目,它偶尔会通过调用animate()的Socket.io接收外部更新。当窗口打开时,一切正常运行,动画调用可以异步运行 问题 但是,当浏览器最小化或其他选项卡打开后重新打开时,应在关闭时运行的所有动画都将排队并在接收到动画时运行 下面是动画调用: 是否有一种简单的方法可以将选项添加到animate()调用或调用一些jquery函数,或者我应该只向应用程序添加适当的逻辑 谢谢。在再次调用Javascript 如何防止JQuery动画调用排队?,javascript,jquery,Javascript,Jquery,背景 我正在处理一个严重依赖JQuery.animate()的项目,它偶尔会通过调用animate()的Socket.io接收外部更新。当窗口打开时,一切正常运行,动画调用可以异步运行 问题 但是,当浏览器最小化或其他选项卡打开后重新打开时,应在关闭时运行的所有动画都将排队并在接收到动画时运行 下面是动画调用: 是否有一种简单的方法可以将选项添加到animate()调用或调用一些jquery函数,或者我应该只向应用程序添加适当的逻辑 谢谢。在再次调用animate()之前,可以对正在设置动画的元
animate()
之前,可以对正在设置动画的元素调用stop()
。像这样:
$(div).stop().animate({
'top': this.topPos(),
'right': this.rightPos()
}, 100);
它将停止动画排队并一次性启动
看
希望这有帮助。通过传递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);
这种行为是由于引入了
requestAnimationFrame
,从jQuery 1.6.3rc1(昨天发布)起就被删除了
另请参见:-1我很抱歉,但与.stop(true,true)一样有用,正如@rick所述,它是由于jQuery中使用了requestAnimationFrame导致的问题。为什么我在这个答案上得到DV,请注意explain@Tomgrohl另一个正确的答案并不意味着这不正确。对不起,我必须同意@Rick的观点。关于问题中提到的内容,jQuery上存在一个bug。这就是问题的原因。@3nigma您的答案提供了一个可能可行的解决方法,但仍然是对jQuery中导致此问题的原因的错误评估。
$(div).stop(true,true).animate({
'top': this.topPos(),
'right': this.rightPos()
}, 100);