2011-12-21 18 views
5

Quiero usar .appendTo() para modificar la posición DOM de un elemento. Una vez que esto esté completo, necesito animar el elemento con CSS3.realizar animación CSS3 después de usar jQuery .appendTo

El elemento no se animará, sino que se ajustará al nuevo estilo CSS.

JavaScript:

$(".run").click(function() { 
    $(".imageOriginal").appendTo(".insert").toggleClass("imageAnimated"); 
}); 

HTML:

<div class="insert"> </div> 
<img src="img/img1.png" class="imageOriginal"/> 

CSS:

.imageOriginal { 
    -webkit-transform: scale(0.1); 
} 
.imageAnimated { 
    -webkit-transition: all 1s ease-in-out;  
    -webkit-transform: scale(1); 
} 

que separa las las y los métodos .appendTo().toggleClass() al fuego en dos diferentes eventos de clic. Este método funciona (pero obviamente no es deseado). También intenté usar .delay(1000) después del apéndice, pero esto tampoco funciona.

+0

jQuery UI ofrece la función .switchClass() como se describe aquí: http://stackoverflow.com/questions/1248542/jquery-animate-with -css-class-only-without-explicit-styles – Stephen

+0

@Stephen ¿Han actualizado jQuery UI para usar las transiciones CSS3? – Jasper

+1

@Stephen No recomiende una biblioteca completa (hinchada, basura) solo para una sola función que implemente un comportamiento fácilmente codificable a mano. – Bojangles

Respuesta

3

El problema es que agrega el contenido y alterna la clase al mismo tiempo. Si se quita la llamada .appendTo() funciona bien:

$(".imageOriginal").toggleClass("imageAnimated"); 

Aquí es una demostración: http://jsfiddle.net/38FrD/1/

No estoy realmente seguro de lo que está sucediendo, pero si miras el elemento de imagen en FireBug se puede ver que la La propiedad transition que se agrega tiene una duración de 0s aunque se especificó una duración.

También .delay() solo funciona para colas (como .animate() llamadas).

ACTUALIZACIÓN

Si se coloca la llamada .toggleClass() dentro de una función anónima setTimeout entonces parece que funcione como desee:

$(".run").click(function() { 
    var $this = $(".imageOriginal"); 
    $this.appendTo('.insert'); 
    setTimeout(function() { 
     $this.toggleClass("imageAnimated"); 
    }, 0); 
}); 

Aquí es una demostración: http://jsfiddle.net/38FrD/2/

+0

Gracias estaba bajo la impresión .delay() retrasaría cualquier método que ocurriera después de la llamada. Todavía no estoy seguro de cómo solucionar esto: el último recurso sería usar jquery .animate en lugar de CSS3 – jaredrada

+0

@porfuse. Solo curiosidad, ¿por qué anexas la imagen a otro elemento? También actualicé mi respuesta con una solución que debería funcionar para usted. – Jasper

+0

Quiero animar un grupo de imágenes dentro de un contenedor, ** excepto ** el que se hizo clic tiene una animación diferente, así que usaré $ (esto) eventualmente.Añado la imagen cliqueada a otro div para que pueda enfocarlo y darle a esa imagen particular una animación diferente. – jaredrada

Cuestiones relacionadas