Diciamo che ho diverse animazioni in esecuzione contemporaneamente e voglio chiamare una funzione una volta che tutte sono finite.jQuery, chiamando una richiamata solo una volta dopo più animazioni
Con una sola animazione, è facile; c'è una richiamata per quello. Per esempio:
$(".myclass").fadeOut(slow,mycallback);
Il problema è che, se il mio selettore trova diversi elementi, il callback verrà chiamata per ciascuno di essi.
Una soluzione non è troppo difficile; ad esempio:
<!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>
La mia domanda è: c'è un modo migliore per farlo?
Nella maggior parte dei casi, utilizzo un valore booleano anziché un contatore (quindi l'azione viene eseguita alla fine della prima animazione), ma altrimenti è lo stesso metodo. Bella domanda, sono curioso per altri modi. –
Infatti. Si desidera attendere tutti se, ad esempio, tutte le animazioni non hanno la stessa lunghezza (non come nel mio esempio semplicistico) e si desidera fare qualcosa solo dopo che le cose si sono fermate o si sono sbiadite nel browser. –