如果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 Solution
我使用全局布尔值来跟踪状态。我讨厌那样做。在我能的时候拿出一笔可以获得更好解决方案的赏金。谢谢大家!
取消赏金
对不起,伙计们,没有意识到我必须和我自己的代表一起购买。 :(答案 0 :(得分:2)
如果你想stop
一个动画,动画中期,并让它从stop
ped css状态移动到另一个状态,最重要的是使用stop(true, false)
。
底线:stop(true,false)
“神奇地”停止动画在其'轨道中但是认为css被设置为停止动画的css参数的任何内容,所以你可以从那一点继续而不试图猜测或计算你应该如何从stop
ped点动画。
换句话说,如果您通过animate
设置css,但是stop
踩它,那么动画的元素将保留在stop
触发的任何css状态,但是css在stop
ped动画中输入的设置将是当前的css设置,直到更改为止。
这是关键。您不必猜测stop
离开css状态的位置。您可以继续返回,就像动画完全完成一样。
这是对这一概念基础的演示:http://jsfiddle.net/dYYZP/65/
从此处删除基本动画:Jquery layered animation slide out from under
<强>后记强>
由于animate
absolute
定位relative
定位,offset
和stop(true,false)
很容易,因此我很少使用任何内置版本在动画中。他们太笨重,不知道你真正需要什么。它们非常适合最基本的动画,但是如果你想让你的页面闪耀,那么上面的那些概念(我可能会非常容易添加)需要被利用。
答案 1 :(得分:1)
您可以使用动画选择器检查当前是否正在设置动画。
答案 2 :(得分:1)
如上所述建议使用“: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);
}
答案 3 :(得分:1)
也许您应该在使用.stop().hide(
和.stop.show(
的任何地方使用hide
和show
。