2011-05-22 5 views
4

J'utilise la fonction jQuerys animate sur un plugin, sur de nombreux éléments de manière simultanée avec des durées différentes pour chaque élément. Je veux savoir si une animation est en cours ou s'il n'y a pas d'animation du tout. Alors je suis venu avec ceci:jQuery est animé sur plusieurs éléments, ce qui est mieux?

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

ou ceci:

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

Ce qui est mieux ???

Connaissez-vous une autre méthode ???

Je ne veux pas ce code $("*").is(':animated'); car il va vérifier toutes les animations et d'autres animations plugins.

avoir à l'esprit que j'ai beaucoup d'éléments, pas seulement 3.

Merci pour la lecture ...

Répondre

4

Peut-être que vous pourriez mettre une classe sur les divs que vous souhaitez vérifier l'animation?

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

il semble que l'utilisation d'une classe est plus rapide. return $ (". myclass"). is (": animé"); – gadlol

7

Je vais avec le second car il est moins de code à lire et à penser. En général, DRY est mieux.

Vous pouvez aussi factoriser que ...

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

J'aime ça. Nettoyer. Simple. Facile à lire. –

1

Je le garderais probablement explicite, pour sauver des cycles. Chaque fois que vous animez, incrémentez numberOfTotalAnimations. À la fin du rappel d'animation, décrémentez-le. C'est si vous avez vraiment besoin de vitesse ici. Sinon, j'aime la proposition de classe de @ Ben.

MISE À JOUR un exemple, demande:

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

Il est pas assez, il est sujette aux erreurs (dans ce que vous pouvez oublier d'augmenter ou diminuer le compteur) - mais il est rapide.

+0

Pouvez-vous être plus précis en donnant un exemple? – gadlol

+1

Pourquoi ne pas surcharger $ .fn.animate pour le faire 100% automatiquement et juste vérifier le compteur. DRY + moins de risques. –

Questions connexes