jQuery选择器:not(:animated)

时间:2011-07-27 19:18:11

标签: javascript jquery

我们正在努力确保加载内容的JavaScript菜单在相关内容加载之前不会被命令覆盖,并通过.show('blind',500)展开,因为动画会运行很多次,它看起来不那么好。所以我有六个看起来像这样的选择器:

("#center_content:not(:animated)")

它似乎没有任何影响。仅限尝试:动画具有预期效果(它永远不会起作用,因为它不会启动动画),并且尝试:not(div)也具有此效果(因为#center_content是div)。出于某种原因,:not(:animated)似乎没有改变结果,因为即使我触发选择器而有问题的div是明显动画的,代码也会运行。我知道我之前已经取得了这样的成功,但这里的差异使我无法实现。


$("#center_content:not(:animated)").hide("blind", 500, function () {
    var selector_str = 'button[value="' + url + '"]';
    //alert(selector_str);
    var button = $(selector_str);
    //inspectProperties(button);
    $("#center_content:not(:animated)").load(url, CenterContentCallback);
    if (button) {
        $("#navigation .active").removeClass("active");
        button.addClass("active");
        LoadSubNav(button);
    }
});

我希望这能提供足够的背景。我觉得第二个选择器是矫枉过正的(因为它只会在第一个选择器成功的情况下运行),但我不知道这会如何导致它以这种方式运行。


以下是似乎在其他情况下工作的片段:

function clearMenus(callback) {
        $('[id$="_wrapper"]:visible:not(:animated)').hide("blind", 500, function() {
           $('[id^="edit_"]:visible:not(:animated)').hide("slide", 200, function() {
            callback();
            });
        });
}

这里,动画队列而不是互相中断,但我发现选择器似乎仍然没有工作 - 动画和相关的加载事件根本不应该运行,因为选择器应该失败。虽然排队是动画显示的好行为,但它让我意识到我似乎从来没有让这个选择器工作。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

有时使用.stop()并在开始新动画之前停止当前动画会很有帮助。

$("#center_content").stop().hide("blind", 500, function () {});

真的取决于它在您的环境中的行为方式。请记住,.stop()将停止动画(例如,隐藏或褪色的中途)

答案 1 :(得分:0)

我不知道我是否理解正确,但是如果你想确保用户在当前动画时不再触发菜单动画(导致它排队动画并看起来很迟钝,这可行并且应该有所帮助我使用if-statement。在任何鼠标悬停/关闭动画之前,我添加了.stop(false, true)

    $('whatever').click(function(){
       //if center_content is not currently animated, do this:
       if ($("#center_content").not(":animated")) {
         $(this).hide(etc. etc. etc.)
       }
       //else if center_content IS currently animated, do nothing.
       else {
         return false;}
    });

我在别处找到的另一个例子:

if($("#someElement").is(":animated")) {
    ...
}

if($("#someElement:animated").length) {
    ...
}

// etc

然后你可以这样做:

$("#showBtn").attr("disabled", $("#someElement").is(":animated"));