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

时间:2012-09-21 16:36:26

标签: jquery jquery-animate keyup

如果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

我使用全局布尔值来跟踪状态。我讨厌那样做。在我能的时候拿出一笔可以获得更好解决方案的赏金。谢谢大家!

取消赏金

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

4 个答案:

答案 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定位,offsetstop(true,false)很容易,因此我很少使用任何内置版本在动画中。他们太笨重,不知道你真正需要什么。它们非常适合最基本的动画,但是如果你想让你的页面闪耀,那么上面的那些概念(我可能会非常容易添加)需要被利用。

答案 1 :(得分:1)

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

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

答案 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(的任何地方使用hideshow