Estoy intentando animar un elemento html creado dinámicamente con transiciones CSS3.Transiciones de CSS3 a elementos creados dinámicamente
Quiero que la animación comience justo antes de que se cree el elemento.
Para estos puedo crear una clase que establece la posición original del elemento y luego ajustar la posición de destino por el jQuery css() método
Pero el nuevo elemento que sólo apears en la posición de destino sin transición .
Si uso un setTimeout de 0ms para establecer el nuevo valor CSS, funciona.
¿Hay algo que estoy haciendo mal? o es una limitación? No creo que deba usar la solución setTimeout.
Gracias!
ACTUALIZACIÓN: Aquí hay un enlace con el código que se ejecuta en jsfiddle.net para que usted pueda experimentar. http://jsfiddle.net/blackjid/s9zSH/
ACTUALIZACIÓN He actualizado el ejemplo con la solución en la respuesta.
http://jsfiddle.net/s9zSH/52/
Aquí es un ejemplo de código completamente de trabajo
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<script type="text/javascript">
//Bind click event to the button to duplicate the element
$(".duplicate").live("click", function (e){
var $to = $("#original .square").clone()
$("body").append($to);
if($(e.target).hasClass("timeout"))
//With setTimeout it work
setTimeout(function() {
$to.css("left", 200 + "px");
},0);
else if($(e.target).hasClass("notimeout"))
// These way it doesn't work
$to.css("left", 200 + "px");
});
</script>
<style type="text/css">
.animate{
-webkit-transition: all 1s ease-in;
}
.square{
width:50px;
height:50px;
background:red;
position:relative;
left:5px;
}
</style>
</head>
<body>
<div id="original">
<div class="square animate"></div>
</div>
<button class="duplicate timeout">duplicate with setTimeout</button>
<button class="duplicate notimeout">duplicate without setTimeout</button>
</body>
</html>
addéndum: aunque no tiene que usar el tiempo de espera, a veces puede ser bueno. realmente depende de tu aplicación. forzar el recálculo sincrónico de los estilos, si se realiza con frecuencia, puede hacer que su UI tartamudee. Si esto ocurre, use el tiempo de espera de forma juiciosa para dividir/amortizar una animación compleja en unos pocos cuadros. – mmaclaurin
Gracias, esta es la primera explicación que he encontrado de * why * un setTimeout es efectivo para forzar transiciones de CSS. –
¡Guau! ¡Genial! Salvaste mi día. Perdió bastante tiempo para descubrir la razón, finalmente lo resolvió. ¡gracias de nuevo! –