2010-09-04 18 views
8

Quiero animar 2 cosas al mismo tiempo cuando el mouse pasa algo.cómo animar dos cosas al mismo tiempo en jquery

por ejemplo Quiero cambiar el color de fondo de box1 con id = "box1" y la posición de box2 con id = "box2" cuando el mouse coloca un div con id = "trigger".

pero no quiero que se animen en una cola, es decir, una detrás de otra. ¡Quiero que comiencen a animar al mismo tiempo y terminen al mismo tiempo!

Respuesta

15

Sólo ellos puede ejecutar en una fila, así:

$("#trigger").hover(function() { 
    $("#box1").stop().animate({ backgroundColor: '#000000' }); 
    $("#box2").stop().animate({ top: "-20px" }); 
}, function() { 
    $("#box1").stop().animate({ backgroundColor: '#FFFFFF' }); //set it back 
    $("#box2").stop().animate({ top: "0px" });     //set it back 
}); 

Este utiliza .hover() para animar una forma cuando se cierne, y animar a vuelta al salir. El .stop() es solo para prevenir la creación de cola de animación. Para animar un color, necesitará the color plugin, o jQuery UI incluido también.

animaciones en jQuery, .animate(), utilizando are implementedsetInterval() con un temporizador de 13 ms, por lo que va a pasar fuera del flujo normal ... haciendo de ellos como anteriormente no esperar a que el primero en terminar, van a ejecutar de forma simultánea.

+0

y cómo puedo animar uno por uno? (no al mismo tiempo) – Mehran

+1

@Mehran: la forma * más segura * es hacer cola, de esta manera: http://jsfiddle.net/nick_craver/Cz62t/ –

+0

@NickCraver ¿Utiliza jQuery el * mismo * temporizador para las animaciones que se ejecutan en el mismo ¿hora? ¿O programa diferentes temporizadores con llamadas setInterval separadas para cada objeto animado? –

4

Cuando se inicia la primera animación, la siguiente línea de código se ejecuta sin esperar a que termine la animación.

Así que hacer dos cosas a la vez:

$('#trigger').hover(function() 
{ 
    $('#box1').animate({ ... }); 
    $('#box2').animate({ ... }); 
}); 
+0

¡Gracias por su respuesta! ;-) – Mehran

3

Salida jQuery.animate() docs. Hay queue propiedad:

queue: Un valor booleano que indica si poner la animación en la cola de efectos. Si false, la animación comenzará inmediatamente.

+5

Aunque está animando elementos individuales, y la cola es * por * elemento :) –

+0

¿podría explicar más? – Mehran

2

Si bien es cierto que las llamadas consecutivas a la animación darán la apariencia de que se están ejecutando al mismo tiempo, 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:

$('#trigger').hover(function() { 
    $('#box1').animate({..., queue: 'trigger-hover'}); 
    $('#box2').animate({..., queue: 'trigger-hover'}).dequeue('trigger-hover'); 
}); 

Otras animaciones pueden ser añadidos a la cola 'gatillo fácil flotar' y todos pueden ser iniciadas siempre la última animación de quitar de la cola son ellos.

Saludos, Anthony

Cuestiones relacionadas