Disons que plusieurs animations sont exécutées en même temps et que je souhaite appeler une fonction une fois toutes les animations terminées.jQuery, rappel d'une seule fois après plusieurs animations
Avec une seule animation, c'est facile; il y a un rappel pour ça. Par exemple:
$(".myclass").fadeOut(slow,mycallback);
Problème, si mon sélecteur trouve plusieurs éléments, le rappel sera appelé pour chacun d'eux.
Une solution de contournement n'est pas trop difficile; par exemple:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var $mc=$(".myclass"),l=$mc.length;
$mc.fadeOut("slow",function(){
if (! --l) $("#target").append("<p>All done.</p>");
});
});
</script>
<style type="text/css">
</style>
</head>
<body>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<div id="target"></div>
</body>
</html>
Ma question est: est-il une meilleure façon de le faire?
Dans la plupart des cas, j'utilise un booléen au lieu d'un compteur (donc l'action est effectuée à la fin de la première animation), sinon c'est la même méthode. Bonne question, je suis curieux d'autres façons. –
En effet. Vous voulez tous les attendre si par exemple toutes vos animations ne sont pas de la même longueur (pas comme dans mon exemple simpliste), et vous voulez faire quelque chose seulement après que les choses s'arrêtent de bouger, ou fading sur votre navigateur. –