我有一个使用
的页面$(id).show("highlight", {}, 2000);
在我启动ajax请求时突出显示一个元素,这可能会失败,所以我想使用像
这样的东西$(id).show("highlight", {color: "#FF0000"}, 2000);
在错误处理程序中。问题是,如果第一个突出显示尚未完成,则第二个突出显示在队列中,并且在第一个突出显示准备好之前不会运行。因此问题是:我可以以某种方式阻止第一个效应吗?
答案 0 :(得分:15)
我将此列为已接受答案的评论,但我认为将其作为独立答案发布是一个好主意,因为它似乎有助于某些人遇到.stop()
<的问题/强>
仅供参考 - 我也在寻找这个答案(试图阻止Pulsate效应),但我的代码中确实有.stop()
。
在审核完文档后,我需要.stop(true, true)
答案 1 :(得分:10)
来自jQuery文档:
http://docs.jquery.com/Effects/stop
停止匹配元素上当前正在运行的动画。 ...
在元素上调用
.stop()
时,会立即停止当前运行的动画(如果有)。例如,如果在调用.slideUp()
时隐藏了.stop()
元素,则元素现在仍将显示,但将是其先前高度的一小部分。不调用回调函数。如果在同一元素上调用多个动画方法,则后面的动画将放置在元素的效果队列中。这些动画直到第一个动画完成才会开始。调用
.stop()
时,队列中的下一个动画立即开始。如果clearQueue
参数的值为true
,则队列中的其余动画将被删除,并且永远不会运行。如果
jumpToEnd
参数的值为true,则当前动画停止,但会立即为该元素指定每个CSS属性的目标值。在上面的.slideUp()
示例中,元素将立即隐藏。然后立即调用回调函数,如果提供的话......
答案 2 :(得分:2)
.stop(true,true)会冻结效果,如果它在当时不可见,那么它将保持不可见。如果您使用脉动效果,这可能是一个问题。
$('#identifier').effect("pulsate", {times:5}, 1000);
为了解决这个问题,我添加了
$('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);
答案 3 :(得分:0)
就我而言,使用下面的代码不起作用,并且保持不透明度值不变:
$('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);
对我来说,去除不透明是可行的:
$('#identifier').stop(true, true).css('opacity','');