Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止JQuery动画调用排队?_Javascript_Jquery - Fatal编程技术网

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

Javascript 如何防止JQuery动画调用排队?,javascript,jquery,Javascript,Jquery,背景 我正在处理一个严重依赖JQuery.animate()的项目,它偶尔会通过调用animate()的Socket.io接收外部更新。当窗口打开时,一切正常运行,动画调用可以异步运行 问题 但是,当浏览器最小化或其他选项卡打开后重新打开时,应在关闭时运行的所有动画都将排队并在接收到动画时运行 下面是动画调用: 是否有一种简单的方法可以将选项添加到animate()调用或调用一些jquery函数,或者我应该只向应用程序添加适当的逻辑 谢谢。在再次调用animate()之前,可以对正在设置动画的元

背景

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

问题

但是,当浏览器最小化或其他选项卡打开后重新打开时,应在关闭时运行的所有动画都将排队并在接收到动画时运行

下面是动画调用:

是否有一种简单的方法可以将选项添加到animate()调用或调用一些jquery函数,或者我应该只向应用程序添加适当的逻辑

谢谢。

在再次调用
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);