如何在jQuery中停止效果

时间:2008-09-12 20:40:00

标签: javascript jquery

我有一个使用

的页面
$(id).show("highlight", {}, 2000);

在我启动ajax请求时突出显示一个元素,这可能会失败,所以我想使用像

这样的东西
$(id).show("highlight", {color: "#FF0000"}, 2000);

在错误处理程序中。问题是,如果第一个突出显示尚未完成,则第二个突出显示在队列中,并且在第一个突出显示准备好之前不会运行。因此问题是:我可以以某种方式阻止第一个效应吗?

4 个答案:

答案 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','');