jquery - fast - Cómo animar CSS Translate
jquery css transform translate (6)
De acuerdo con CanIUse debes tenerlo con múltiples prefijos.
$(''div'').css({
"-webkit-transform":"translate(100px,100px)",
"-ms-transform":"translate(100px,100px)",
"transform":"translate(100px,100px)"
});
¿Es posible animar la propiedad CSS traducida a través de jquery?
$(''.myButtons'').animate({"transform":"translate(50px,100px)"})
¿Y funciona en muchos navegadores?
La demostración no funciona: http://jsfiddle.net/ignaciocorreia/xWCVf/
ACTUALIZAR:
Mis soluciones:
- Implementaciones simples - http://jsfiddle.net/ignaciocorreia/R3EaJ/
- Implementación compleja y multi-navegador - http://ricostacruz.com/jquery.transit/
Existe una forma interesante de lograr esto utilizando el método jQuery animate
de una manera única, al llamar al método animate
en un objeto javascript que describe el valor from
y luego pasa como primer parámetro otro objeto js que describe el valor a y una función de step
que maneja cada paso de la animación de acuerdo con los valores descritos anteriormente.
Ejemplo - Animate transform translateY
:
var $elm = $(''h1''); // element to be moved
function run( v ){
// clone the array (before "animate()" modifies it), and reverse it
var reversed = JSON.parse(JSON.stringify(v)).reverse();
$(v[0]).animate(v[1], {
duration: 500,
step: function(val) {
$elm.css("transform", `translateY(${val}px)`);
},
done: function(){
run( reversed )
}
})
};
// "y" is arbitrary used as the key name
run( [{y:0}, {y:80}] )
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>jQuery animate <pre>transform:translateY()</pre></h1>
Hay jQuery-plugins que te ayudan a lograr esto como: http://ricostacruz.com/jquery.transit/
Necesitas configurar la animación de fotogramas clave en tu CSS. Y usa el fotograma clave con jQuery:
$(''#myTest'').css({"animation":"my-animation 2s infinite"});
#myTest {
width: 50px;
height: 50px;
background: black;
}
@keyframes my-animation {
0% {
background: red;
}
50% {
background: blue;
}
100% {
background: green;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myTest"></div>
Yo también estaba buscando una buena manera de hacer esto, encontré que la mejor manera era establecer una transición en la propiedad "transformar" y luego cambiar la transformación y luego eliminar la transición.
Lo puse todo junto en un plugin jQuery
https://gist.github.com/dustinpoissant/8a4837c476e3939a5b3d1a2585e8d1b0
Usarías el código así:
$("#myElement").animateTransform("rotate(180deg)", 750, function(){
console.log("animation completed after 750ms");
});
$(''div'').css({"-webkit-transform":"translate(100px,100px)"});