如果动画X已经运行(内部键盘),请不要动画X

如果msg.d开始从’true’返回’false’直到动画停止有足够的时间,它当前写入的方式会导致hide一遍又一遍地触发。

有没有isHiding或什么?

提前致谢!

if(msg.d == "true") { if(!$("#addContactEmailError").is(":visible")) { $("#addContactEmailError").show('bounce'); } $("#addContactSubmitButton").attr("disabled", true); } else { if($("#addContactEmailError").is(":visible")) { $("#addContactEmailError").hide('slide', { direction: "up" }); } $("#addContactSubmitButton").attr("disabled", false); } 

编辑1

这都是一个keyup处理程序。

编辑2

使用动画仅在动画完成时触发动画。 如果msg.d更改,但现在不正确的动画未完成,则不会触发正确的动画。

Lame解决方案

我使用全局布尔值来跟踪状态。 我讨厌那样做。 尽可能为我提供更好的解决方案。 谢谢大家!

取消赏金

对不起伙计们,没有意识到我必须和我自己的代表一起购买。 🙁

如果你想stop动画,动画中期,并让它从stop ped css状态移动到另一个状态,最重要的是使用stop(true, false)

底线: stop(true,false) “神奇地”停止动画在其’轨道中但是认为css被设置为停止动画的css参数的任何内容,因此你可以从那一点继续而不试图猜测或弄清楚如何你应该从stop点动画。

换句话说,如果你通过animate设置css,但你stop它,动画的元素将保持在stop触发的任何css状态,但在stop ped动画中输入的css设置将是当前的css设置直到改变。

这是关键。 你不必猜测stop离开css状态的位置。 您可以继续返回,就像动画完全完成一样。

这是对这个概念的基础知识的演示: http : //jsfiddle.net/dYYZP/65/


从这里扯掉基础动画: Jquery分层动画从下面滑出


后记

由于animate的易用性, relative定位, offsetstop(true,false)内的absolute定位,我很少使用任何内置动画。 他们太笨重了,不知道你真正需要什么。 它们非常适合最基本的动画,但是如果你想让你的页面闪耀,那么上面的那些概念(我可能很容易添加)需要被利用。

您可以使用动画选择器检查当前是否正在设置动画。

http://api.jquery.com/animated-selector/

如上所述建议使用“:animated”seclector

 if(msg.d == "true") { var contact = $("#addContactEmailError"); if(!contact.is(":visible") && !contact.is(":animated")) { contact.show('bounce'); } $("#addContactSubmitButton").attr("disabled", true); } else { if(contact.is(":visible") && !contact.is(":animated")) { contact.hide('slide', { direction: "up" }); } $("#addContactSubmitButton").attr("disabled", false); } 

也许你应该使用.stop().hide(.stop.show(无论你在哪里使用hideshow