2011-07-27 52 views
3

我們試圖確保我們的加載內容的JavaScript菜單在加載內容之前不會被命令溢出,並且會通過.show('blind',' 500),因爲那時動畫運行了很多次,而且看起來不怎麼樣。所以我有六個看起來像這樣的選擇器:jQuery選擇器:不是(:animated)

("#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(); 
      }); 
     }); 
} 

這裏,動畫排隊,而不是打斷對方,但它發生,我認爲選擇仍然不似乎正在工作 - 動畫和相關的加載事件不應該在運行,因爲選擇器應該失敗。雖然排隊是動畫顯示的良好行爲,但它讓我意識到,我似乎從來沒有得到這個選擇器的工作。我錯過了什麼嗎?

+1

您可以發佈您的js的某些部分頁面中使用? – ShankarSangoli

+0

因此,如果同一個元素同時出現多個動畫,您會遇到問題嗎? –

+2

爲防萬一它是一個嘶嘶聲限制,你嘗試了'$(「#center_content」)。not(「:animated」)'? –

回答

1

有時使用.stop()有助於您在開始新動畫之前停止當前動畫。

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

真的取決於它在您的環境中的表現。請記住,.stop()將停止原來的動畫(例如,隱藏或褪色的一半)

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"));