13

我有一个页面使用

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

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

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

在错误处理程序中。问题是,如果第一个亮点还没有完成,第二个会被放入队列中,直到第一个准备好后才会运行。因此,问题是:我能以某种方式阻止第一个效果吗?

4

4 回答 4

15

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


仅供参考 - 我也在寻找这个答案(试图停止脉冲效应),但我的.stop()代码中确实有一个。

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

于 2012-04-23T12:42:32.797 回答
11

来自 jQuery 文档:

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

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

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

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

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

于 2008-09-12T20:42:48.133 回答
2

.stop(true,true)将冻结效果,因此如果它当时不可见,则它仍然不可见。如果您使用脉动效应,这可能是个问题。

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

为了解决这个问题,我添加了

$('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);
于 2016-02-22T11:10:42.407 回答
0

就我而言,使用以下代码不起作用并保持不透明度值保持不变:

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

对我来说,只需删除不透明度即可:

$('#identifier').stop(true, true).css('opacity','');
于 2019-07-20T08:26:55.097 回答