如果msg.d开始从"true"返回"false",则当前的编写方式会导致隐藏反复启动,直到有足够的时间停止动画为止。
有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
使用动画仅在动画完成时激发动画。如果消息更改,但现在不正确的动画没有完成,正确的动画将不会启动。
薄片溶液
我使用了一个全局布尔值来跟踪状态。我讨厌那样做。尽我所能提供更好的解决方案。感谢大家!
取消反弹
对不起,伙计们,没有意识到我必须用我自己的代表购买
如果要在动画中间stop
一个动画,并使其从stop
ped css状态移动到另一个状态,请使用最重要的stop(true, false)
。
一句话:stop(true,false)
"神奇地"停止了动画的轨迹,但认为css设置为停止的动画的css参数,因此您可以从该点继续,而无需猜测或弄清楚应该如何从stop
ped点进行动画。
换言之,如果您通过animate
设置css,但您对其进行了stop
ped,则动画元素将保持在stop
激发的任何css状态,但在stop
ped动画中输入的css设置将是当前的css设置,直到更改为止。
这是关键。您不必猜测stop
将css状态遗留在何处。您可以继续返回,就像您的动画完全完成一样。
这是对这一概念的基本说明:http://jsfiddle.net/dYYZP/65/
从这里撕下基础动画:Jquery分层动画从下滑出
Postscript
由于animate
、absolute
在relative
定位、offset
和stop(true,false)
中的定位很容易,所以我很少使用任何内置动画。它们太笨重了,不知道你真正需要什么。它们非常适合最基本的动画,但如果你想让你的页面闪闪发光,上面的这些概念(我可能会添加这些概念)需要加以利用。
您可以使用动画选择器检查当前是否正在为其设置动画。
http://api.jquery.com/animated-selector/
如上所述,建议使用":animatized"secelector
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);
}
也许您应该在使用hide
和show
的任何地方使用.stop().hide(
和.stop.show(
。