2012-02-06 51 views
0

我有3個環節,每個環節的聯繫做一些動畫我如何可以禁用,而動畫

$("a#home_hits").click(function() {  
    $(".hits").animate({left: "549px", opacity: 1}, { duration: 1500, queue: false }); 
}); 

    $("a#home_hits1").click(function() { 
     $(".hits1").animate({left: "549px", opacity: 1}, { duration: 1500, queue: false }); 
    }); 

    $("a#home_hits2").click(function() { 
     $(".hits2").animate({left: "549px", opacity: 1}, { duration: 1500, queue: false }); 
    }); 

,但如果我點擊任何鏈接仍然工作

其他環節我想這段代碼的問題是沒有運氣

$('a').click(function() { 
if ($('div:animated')) { 
    return false; 
} 

});

我能做些什麼禁用其他環節,而動畫完成

謝謝

回答

0

$('div:animated')沒有返回null,而是用0元素一個jQuery對象。在這種情況下,您可以使用$('div:animated').length > 0

0

你的if語句:

if ($('div:animated')) { 

不是做你的想法,因爲$('div:animated')總是返回一個對象即使沒有元素匹配選擇和任何對象將是truthy至於如果擔心。你需要測試.length屬性,看看是否有任何元素匹配:

if ($('div:animated').length > 0) { 

注意:給要動畫你可以設置三個動畫在你的錨元素的ID和類名的元素之間的關係具有單一功能。

編輯:您可以使用此標誌設置是否有正在運行的動畫:

var animationInProgress = false; 

$('a[id^="home_hits"]').click(function() { 
    if (animationInProgress) 
     return false; 
    animationInProgress = true; 
    $(this.id.split("_")[1]).animate({left: "549px", opacity: 1}, 
            { duration: 1500, queue: false, 
             complete : function() { 
              animationInProgress = false; 
             } }); 
}); 

(即使用^= starts with selector把一個單擊處理程序上的所有錨一次,然後裏面的函數使用下劃線之後的部分id作爲類名的動畫。)

編輯:爲了適合您現有的代碼,您已經從您的$("a").click()處理程序返回false,但雖然這將取消默認行爲並阻止事件冒泡通過DOM它不會阻止其他ev從運行的a元素的處理程序。要做到這一點使用stopImmediatePropagation()

$('a').click(function (e) { 
    if ($(':animated').length > 0) { 
     e.stopImmediatePropagation(); 
     return false; 
    } 
}); 
+0

仍然是同樣的問題,但我認爲這是我的錯。 (函數(){嘗試{'a')。click(function(){if(':animated')。length> 0){ return false; } }); $(「a#home_hits」)。click(function(){ $(「。block1」)。animate({left:「549px」,opacity:1},{duration:1500,queue:false}); \t });點擊(功能(){(「。block2」)。animate({left:「549px」,opacity:1},{duration:1500,queue:false }); });點擊(功能(){(「。塊3」)。animate({left:「549px」,opacity:1},{duration:1500,queue:false}); }); (e){}});' – 2012-02-06 03:57:56

+0

我已經用一些選項更新了我的問題。我認爲,如果你添加'.stopImmediatePropagation()',你的方式會起作用,儘管'$(「a」)'上的處理器會停止所有的鏈接工作,所以用戶將無法導航到其他直到動畫完成,直到您的網站中的頁面。另一種方法是將我的答案中顯示的所有'$(「a#...」)'處理程序組合起來,然後使用像我所示的標誌或使用if($(':animated')。length > 0)返回false;' – nnnnnn 2012-02-06 04:18:35

2

您可以輕鬆地禁用你的鏈接,而動畫運行

$('a').click(function() { 
    if ($(':animated').length) { 
    return false; 
}  
}); 

當然你也可以更換$(「A」)選擇器僅匹配某些環節。

+0

固定與CSS技巧...謝謝大家 – 2012-02-06 04:57:56