Digamos que tengo varias animaciones ejecutándose a la vez, y quiero llamar a una función una vez que todas hayan finalizado.jQuery, llamando a una devolución de llamada una sola vez después de múltiples animaciones
Con solo una animación, es fácil; hay una devolución de llamada para eso. Por ejemplo:
$(".myclass").fadeOut(slow,mycallback);
Problema es que si mi selector encuentra varios elementos, se llamará a la devolución de llamada para cada uno de ellos.
Una solución no es muy difícil; por ejemplo:
<!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>
Mi pregunta es: ¿existe una forma mejor de hacerlo?
En la mayoría de los casos, utilizo un valor booleano en lugar de un contador (por lo que la acción se realiza al final de la primera animación), pero de lo contrario es el mismo método. Buena pregunta, tengo curiosidad por otras formas. –
De hecho. Desea esperar a todos ellos si, por ejemplo, todas sus animaciones no son de la misma longitud (no como en mi ejemplo simplista), y desea hacer algo solo después de que las cosas dejen de moverse o se desvanezcan en su navegador. –