Puedo rotar un div con css, y jquery .rotar, pero no sé cómo animarlo.jQuery: ¿cómo puedo animar una rotación div?
Respuesta
Haz uso de WebkitTransform/-moz-transform: rotate(Xdeg)
. Esto no funcionará en IE, pero la solución de Matt zachstronaut tampoco funciona en IE.
Si quieres apoyar IE también, que tendrá que mirar en el uso de un canvas
como yo creo Raphael does.
Aquí hay un fragmento de jQuery simple que rota los elementos en un objeto jQuery. La rotación puede iniciarse y detenerse:
$(function() {
var $elie = $("img"), degree = 0, timer;
rotate();
function rotate() {
$elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});
$elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});
timer = setTimeout(function() {
++degree; rotate();
},5);
}
$("input").toggle(function() {
clearTimeout(timer);
}, function() {
rotate();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<input type="button" value=" Toggle Spin " />
<br/><br/><br/><br/>
<img src="http://i.imgur.com/ABktns.jpg" />
@Steve Gracias por transferir jsfiddle a este fragmento de código. ¡Eso es genial! –
Respuesta impresionante de hecho, pero aparentemente es aún más fácil en jQuery 1.8: http://stackoverflow.com/a/14016604/1450294 –
Si usted está diseñando para un dispositivo iOS o simplemente webkit, puede hacerlo sin ningún tipo JS:
CSS:
@-webkit-keyframes spin {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
.wheel {
width:40px;
height:40px;
background:url(wheel.png);
-webkit-animation-name: spin;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
-webkit-animation-duration: 3s;
}
Esto activaría la animación en carga. Si quería desencadenar en vuelo estacionario, que podría tener este aspecto:
.wheel {
width:40px;
height:40px;
background:url(wheel.png);
}
.wheel:hover {
-webkit-animation-name: spin;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-duration: 3s;
}
este código funciona solo en chrome;) –
@khaled_webdev es por eso que dije "Si está diseñando para un dispositivo con iOS o simplemente un juego web " – inorganik
¡Gracias! Aquí hay una demostración: http://codepen.io/leongaban/pen/aiedl –
Basado en respuesta Peter Ajtai, aquí es un pequeño plugin jQuery que pueden ayudar a los demás. No probé en Opera e IE9, pero también debería funcionar en estos navegadores.
$.fn.rotate = function(until, step, initial, elt) {
var _until = (!until)?360:until;
var _step = (!step)?1:step;
var _initial = (!initial)?0:initial;
var _elt = (!elt)?$(this):elt;
var deg = _initial + _step;
var browser_prefixes = ['-webkit', '-moz', '-o', '-ms'];
for (var i=0, l=browser_prefixes.length; i<l; i++) {
var pfx = browser_prefixes[i];
_elt.css(pfx+'-transform', 'rotate('+deg+'deg)');
}
if (deg < _until) {
setTimeout(function() {
$(this).rotate(_until, _step, deg, _elt); //recursive call
}, 5);
}
};
$('.my-elt').rotate()
, pero ¿y si rorate tuviera 90deg => start form 0? si ejecuta rotar() -> debería mostrar el grado no girar – user956584
Para poder rotar ambas direcciones: '' 'var deg = (_initial <_step)? _initial + _step: _initial - _step; '' ' Además, Jquery hace el prefijo automáticamente ahora. – forresto
El principal problema con esta solución es que no se anima en función del tiempo como '' '$ .animate()' '', por lo que girar 180º lleva el doble de 90º. – forresto
Si sólo desea una opción de jQuery, esto va a funcionar:
$(el).stop().animate(
{rotation: 360},
{
duration: 500,
step: function(now, fx) {
$(this).css({"transform": "rotate("+now+"deg)"});
}
}
);
Esto funciona con jQuery 1.8, que se encarga de CSS prefijar automáticamente. jQuery no anima la rotación, así que estoy poniendo el transform:rotate()
en la función personalizada step
. Sólo se puede trabajar a partir de 0.
Demostración: http://jsfiddle.net/forresto/ShUgD/
IE9 y Mobile Safari 4 transforma el apoyo de CSS, pero no transiciones CSS, por lo que me ocurrió con esta simple cuña, utilizando pruebas de función Modernizr:
if (Modernizr.csstransitions) {
$(el).css({
"transition": "all 500ms ease-in-out"
});
}
$(el).click(function(){
var rotateTo = 360;
if (Modernizr.csstransitions) {
$(el).css({"transform": "rotate("+rotateTo+"deg)"});
} else {
$(el).stop().animate(
{rotation: rotateTo},
{
duration: 500,
step: function(now, fx) {
$(this).css({"transform": "rotate("+now+"deg)"});
}
}
);
}
});
Lo anterior usará transiciones CSS cuando estén disponibles.
He estado usando
$.fn.rotate = function(degrees, step, current) {
var self = $(this);
current = current || 0;
step = step || 5;
current += step;
self.css({
'-webkit-transform' : 'rotate(' + current + 'deg)',
'-moz-transform' : 'rotate(' + current + 'deg)',
'-ms-transform' : 'rotate(' + current + 'deg)',
'transform' : 'rotate(' + current + 'deg)'
});
if (current != degrees) {
setTimeout(function() {
self.rotate(degrees, step, current);
}, 5);
}
};
$(".r90").click(function() { $("span").rotate(90) });
$(".r0").click(function() { $("span").rotate(0, -5, 90) });
span { display: inline-block }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<span>potato</span>
<button class="r90">90 degrees</button>
<button class="r0">0 degrees</button>
¡Agradable! Pero en jQuery 1.8, aparentemente hay una manera más fácil: http://stackoverflow.com/a/14016604/1450294 –
Esto funciona para mí:
function animateRotate (object,fromDeg,toDeg,duration){
var dummy = $('<span style="margin-left:'+fromDeg+'px;">')
$(dummy).animate({
"margin-left":toDeg+"px"
},{
duration:duration,
step: function(now,fx){
$(object).css('transform','rotate(' + now + 'deg)');
}
});
};
¡Esto funciona mucho mejor que las otras soluciones para posiciones de inicio arbitrarias! Buen trabajo :). –
que necesitaba para girar un objeto, sino que tenga una llamada función de la espalda. Inspirado por la respuesta de John Kern, creé esto.
function animateRotate (object,fromDeg,toDeg,duration,callback){
var dummy = $('<span style="margin-left:'+fromDeg+'px;">')
$(dummy).animate({
"margin-left":toDeg+"px"
},
{
duration:duration,
step: function(now,fx){
$(object).css('transform','rotate(' + now + 'deg)');
if(now == toDeg){
if(typeof callback == "function"){
callback();
}
}
}
}
)};
Haciendo esto, puede simplemente llamar la rotación del objeto como tal ...(en mi caso lo estoy haciendo en un ícono de triángulo de revelación que ya se ha girado de forma predeterminada a 270 grados y lo estoy rotando otros 90 grados a 360 grados a 1000 milisegundos. El último argumento es la devolución de llamada después de que la animación terminado.
animateRotate($(".disclosure_icon"),270,360,1000,function(){
alert('finished rotate');
});
a partir de ahora todavía no puede rotaciones animados con jQuery , pero se puede con CSS3 animaciones, entonces simplemente añadir y eliminar la clase con jQuery para que se produzca la animación.
HTML
<img src="http://puu.sh/csDxF/2246d616d8.png" width="30" height="30"/>
CSS3
img {
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
transform: rotate(-90deg);
transition-duration:0.4s;
}
.rotate {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
transition-duration:0.4s;
}
jQuery
$(document).ready(function() {
$("img").mouseenter(function() {
$(this).addClass("rotate");
});
$("img").mouseleave(function() {
$(this).removeClass("rotate");
});
});
- 1. jQuery animar un div rotación
- 2. jquery texto rotación
- 3. Jquery animar ocultar y mostrar
- 4. Animar una transformación CSS con jQuery
- 5. cómo animar a jquery load()
- 6. ¿Cómo puedo animar CATransform3Ds con CAKeyframeAnimation?
- 7. jQuery animar en una imagen de sustitución
- 8. ¿Cómo puedo animar en jQuery sin apilar devoluciones de llamada?
- 9. ¿Cómo puedo desvanecer un div usando jQuery?
- 10. jQuery animar margen superior
- 11. Animar marginLeft con jQuery
- 12. ¿Cómo puedo animar MKAnnotationView drop?
- 13. Cómo animar una ventana?
- 14. jquery "animar" valor variable
- 15. ToggleClass animar jQuery?
- 16. Jquery animate div a la misma posición que otro div
- 17. jQuery animar a transparente
- 18. JQuery animar a la izquierda y escalar
- 19. cómo animar siguiendo el mouse en jquery
- 20. jQuery Animation: dejar de animar una vez fuera del mouse
- 21. Animar un DIV con JavaScript representa artefactos en Chrome
- 22. Jquery - Animar a la altura: auto
- 23. jQuery: ¿Cómo animar un div centrado para llenar la pantalla mientras todavía está centrado?
- 24. jQuery: Animar ancho/alto, pero permanecer centrado
- 25. jQuery animar altura a auto
- 26. jquery: ¿puedo animar la posición: absoluta a posición: relativa?
- 27. Cómo puedo animar un elemento a su altura natural usando jQuery
- 28. cómo animar dos cosas al mismo tiempo en jquery
- 29. Cómo puedo animar una propiedad UIButton Alpha con MonoTouch
- 30. Evento después de que un div ha terminado de animar?
¿Qué tipo de animación? Varios están integrados en jQuery. Incluso hay algunos con CSS 3. –
justo como el tipo cuando usted .animate, y le da diferentes propiedades de CSS ... como si quisiera que gire a la nueva posición. – NullVoxPopuli
Un ejemplo para su pregunta es muy útil para responder. por favor proporcione un ejemplo (si es posible). –