jquery fade-ins,fade-outs堆积如山

时间:2015-01-23 20:08:08

标签: jquery

我有一些jquery ajax,当它返回时,根据操作的结果,淡入并淡出页面上的各种DIV消息。例如:

$("#RefConflictSelf").fadeIn(1000).fadeOut(6000);

我喜欢这种效果,我想保留它。

当用户在点击另一个按钮之前等待至少7秒以触发另一个ajax操作时,此工作正常。但是,如果他们一个接一个地点击按钮(实际上是合法的事情),淡入淡出的div开始堆积,这样你就可以看到这些div淡入并淡出用户之前不再关心的几个操作。

摘要:当用户点击第二个按钮时,他们不再关心第一个/上一个按钮点击的div的淡入淡出/淡出。

问题:有没有办法立即隐藏任何"淡入或淡出" divs,但仍然正确淡入最新按钮点击的消息?

我已经尝试了这个:只要点击一个按钮,我就会立即隐藏所有的消息div,例如:

$("#RefConflictSelf").hide();

这种作品,但它很笨拙,因为如果你一个接一个地点击5个按钮,新的div消息将保持不可见,直到原来的消息消失。所以" .hide()"似乎踩着新的"淡入"操作,直到原始(或最新的非踩踏)的淡入淡出时间已经过去,并且全部完成。

如何使jquery隐藏所有以前的淡化div消息,但是然后允许最新的div消息淡入,然后像往常一样输出? (除非当然点击了另一个按钮,在这种情况下,旧的应该被踩踏,并允许新的按钮工作。)

1 个答案:

答案 0 :(得分:3)

动画堆积的原因是因为fadeIn()fadeOut()以比实际清除速度更快的速度添加到动画队列中(一对7秒,基于你的持续时间)。因此,您需要在调用新的淡入淡出动画之前清除队列。

这是通过使用stop(true)完成的,这是stop(true,false)的简称,指令jQuery(1)清除队列但(2)没有跳转到动画的结束状态:

$("#RefConflictSelf").stop(true).fadeIn(1000).fadeOut(6000);

根据您希望实现的效果,有时stop(true,true)可能更适合您的需求,因为它指示清除队列跳转到当前排队动画的最终状态(或多个)。


虽然您没有根据您的问题展示您的标记:

  

如何使jquery隐藏所有以前的淡化div消息,但随后   允许最新的div消息淡入,然后出去,正常吗? (除非   然后点击另一个按钮,在这种情况下是旧按钮   应该被踩踏,允许新的工作。)

...我觉得你正在回收身份证。请记住, ID 在HTML文档中必须是唯一的。根据定义处理多个相同ID的浏览器行为仍未定义,但通常(智能地,排序)选择第一个匹配并忽略其余ID。

p / s:我在一年前处理jQuery动画几个月时碰巧write an article why .stop() is very useful