如何在jQuery中停止效果

我有一个页面使用

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

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

 $(id).show("highlight", {color: "#FF0000"}, 2000); 

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

来自jQuery文档:

http://docs.jquery.com/Effects/stop

停止匹配元素上当前运行的动画。

在元素上调用.stop() ,会立即停止当前运行的动画(如果有)。 例如,如果在.stop() .slideUp()时使用.slideUp()隐藏元素,则现在仍将显示该元素,但该元素将是其先前高度的一小部分。 不调用回调函数。

如果在同一元素上调用多个动画方法,则后面的动画将放置在元素的效果队列中。 这些动画在第一个动画完成之前不会开始。 调用.stop() ,队列中的下一个动画立即开始。 如果clearQueue参数的值为true ,则队列中的其余动画将被删除,并且永远不会运行。

如果为jumpToEnd参数提供值true,则当前动画将停止,但会立即为该元素指定每个CSS属性的目标值。 在我们上面的.slideUp()示例中,该元素将立即被隐藏。 然后立即调用回调函数,如果提供的话……

我将此列为对已接受答案的评论,但我认为将其作为独立答案发布是一个好主意,因为它似乎可以帮助某些人遇到.stop()问题


仅供参考 – 我也在寻找这个答案(尝试停止Pulsate效果),但我的代码中确实有.stop()

在查看了文档之后,我需要.stop(true, true)

.stop(true,true)会冻结效果,所以如果它在当时不可见,那么它仍然是不可见的。 如果您使用脉动效果,这可能是一个问题。

 $('#identifier').effect("pulsate", {times:5}, 1000); 

为了解决这个问题,我补充道

 $('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);