2011-05-22 73 views
4

我在一個插件上使用jQuerys動畫函數,在許多元素上爲每個元素模擬不同的持續時間。我想知道是否有任何動畫正在運行,或者根本沒有動畫。所以我想出了這個:jQuery在多個元素上動畫,哪個更好?

if($div1.is(':animated') || $div2.is(':animated') || $div3.is(':animated')) return true; 
else return false; 

或本:

if($div1.add($div2).add($div3).is(':animated')) return true; 
else return false; 

哪個更好???

你知道任何其他方法?

我不想要這個代碼$("*").is(':animated');,因爲它會檢查所有動畫和其他插件動畫。

有想法,我有很多的元素,而不僅僅是3

感謝您的閱讀...

回答

4

也許你可以把一個類你想檢查動畫的div?

if ($(".myclass").is(":animated")) return true; 
+1

似乎使用一個類更快。返回$(「。myclass」)。is(「:animated」); – gadlol 2011-05-23 00:34:14

7

我將與第二去,因爲它是更少的代碼閱讀和思考它。

一般來說,DRY更好。

你也可以重構這...

return $div1.add($div2).add($div3).is(':animated'); 
+0

我喜歡它。清潔。簡單。易於閱讀。 – 2011-05-23 04:03:07

1

我可能會保持它明確,以節省週期。每次動畫時,都會增加numberOfTotalAnimations。在動畫回調結束時,將其遞減。那就是如果你真的需要這裏的速度。否則,我喜歡@ Ben的班級建議。

UPDATE用一個例子,通過要求:

var numberOfTotalAnimations = 0; 

numberOfTotalAnimations++; 
$('#thing').animate({ 
    opacity: 0.1 
    }, 2000, function() { 
    numberOfTotalAnimations--; 
    }); 

if (!numberOfTotalAnimations) { 
    console.log("Everything's quiet."); 
} else { 
    console.log("Something's moving."); 
} 

它不漂亮,這是容易出錯(因爲你可以忘記遞增或遞減計數器) - 但它的快速。

+0

舉個例子,你能更具體嗎? – gadlol 2011-05-23 00:35:38

+1

爲什麼不重寫$ .fn.animate以便自動完成此操作,只需檢查計數器即可。 DRY +減少風險。 – 2011-05-23 04:08:03