2009-08-09 15 views
195

¿Es posible ejecutar dos animaciones en dos elementos diferentes al mismo tiempo? Necesito el opuesto de esta pregunta Jquery queueing animations.¿Cómo ejecutar dos animaciones de jQuery simultáneamente?

Necesito hacer algo como esto ...

$('#first').animate({ width: 200 }, 200); 
$('#second').animate({ width: 600 }, 200); 

sino para ejecutar los dos al mismo tiempo. Lo único que podría pensar sería usar setTimeout una vez para cada animación, pero no creo que sea la mejor solución.

+0

que tienen un verdadero problema cuando la animación de diferentes propiedades CSS. Esta pregunta parece vieja, y la puse en el JSFiddle, parece que ambos enfoques funcionan. ¿Sigue siendo relevante? http://jsfiddle.net/AVsFe/ – valk

+2

En jquery actual, y creo que desde jQuery 1.4, el código anterior anima ambos simultáneamente, ya que las colas de fx están asociadas al elemento al que llamas .animate(), no un global cola. –

+0

Erm ... ¿lo has probado? Si usa el código exacto que tiene allí, para mi comprensión de cómo 'animate()' funciona, deberían ejecutarse simultáneamente. – chaos

Respuesta

390

sí, hay!

$(function() { 
    $("#first").animate({ 
     width: '200px' 
    }, { duration: 200, queue: false }); 

    $("#second").animate({ 
     width: '600px' 
    }, { duration: 200, queue: false }); 
}); 
+11

¡Gracias por esto, no sabía acerca de la variable 'queue'! – dotty

+2

¿Puedo preguntar cuál es el propósito de pasarle una función a jQuery? – pilau

+7

@pilau Se ejecutará cuando el documento esté listo. Esta es una abreviatura de $ (document) .ready (function() {}); y le permite poner su código de javascript antes de la definición de su elemento. –

8

Si ejecuta lo anterior tal como es, parecerá que se ejecutan simultáneamente.

Aquí hay algo de código de prueba:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script> 
$(function() { 
    $('#first').animate({ width: 200 }, 200); 
    $('#second').animate({ width: 600 }, 200); 
}); 
</script> 
<div id="first" style="border:1px solid black; height:50px; width:50px"></div> 
<div id="second" style="border:1px solid black; height:50px; width:50px"></div> 
16

que se ejecutan al mismo tiempo sí. ¿Qué pasaría si quisiera ejecutar dos animaciones en el mismo elemento simultáneamente?

$(function() { 
    $('#first').animate({ width: '200px' }, 200); 
    $('#first').animate({ marginTop: '50px' }, 200); 
}); 

Esto termina haciendo cola en las animaciones. para llegar a ejecutarlos simultáneamente, usaría solo una línea.

$(function() { 
    $('#first').animate({ width: '200px', marginTop:'50px' }, 200); 
}); 

¿Hay alguna otra manera de ejecutar dos animaciones diferentes en el mismo elemento al mismo tiempo?

7

creo que he encontrado la solución en la documentación de jQuery:

anima todo el párrafo a un estilo de izquierda de 50 y la opacidad de 1 (opaco, visible), completando la animación dentro 500 milisegundos. También lo hará hacerlo fuera de la cola, lo que significa que se iniciará automáticamente sin esperando su turno.

$("p").animate({ 
    left: "50px", opacity: 1 
}, { duration: 500, queue: false }); 

simplemente añadir: queue: false.

+1

¿Cómo integrar la función completa en esta? : s – Brainfeeder

2

Vea esta brillante publicación en el blog sobre la animación de valores en objetos ... ¡puede usar los valores para animar lo que quiera, al 100% simultáneamente!

http://www.josscrowcroft.com/2011/code/jquery-animate-increment-decrement-numeric-text-elements-value/

lo he usado como este para deslizarse de entrada/salida:

 slide : function(id, prop, from, to) { 
      if (from < to) { 
       // Sliding out 
       var fromvals = { add: from, subtract: 0 }; 
       var tovals = { add: to, subtract: 0 }; 
      } else { 
       // Sliding back in 
       var fromvals = { add: from, subtract: to }; 
       var tovals = { add: from, subtract: from }; 
      } 

      $(fromvals).animate(tovals, { 
       duration: 200, 
       easing: 'swing', // can be anything 
       step: function() { // called on every step 
        // Slide using the entire -ms-grid-columns setting 
        $(id).css(prop, (this.add - this.subtract) + 'px 1.5fr 0.3fr 8fr 3fr 5fr 0.5fr'); 
       } 
      }); 
     } 
+1

Enlace muerto, lo encontré de nuevo en https://web.archive.org/web/20150101065437/http://www.josscrowcroft.com/2011/code/jquery-animate-increment-decrement-numeric-text- elementos-valor # – PhiLho

2

Si bien es cierto que las llamadas consecutivas para animar va a dar la apariencia de que se están ejecutando al mismo tiempo, la la verdad subyacente es que son animaciones distintas que se ejecutan muy cerca de paralelo.

para asegurar que las animaciones son de hecho funcionan al mismo uso del tiempo:

$(function() { 
    $('#first').animate({..., queue: 'my-animation'}); 
    $('#second').animate({..., queue: 'my-animation'}).dequeue('my-animation'); 
}); 

Otras animaciones pueden ser añadidos a la cola 'mi-animación' y todos pueden ser iniciadas siempre la última animación de quitar de la cola son ellos.

Cheers, Anthony

Cuestiones relacionadas