detener la animación de jquery cuando no se desplaza
Frecuentes
Visto 226 veces
1
Publiqué una pregunta antes sobre un div
animación y estoy tratando de modificarla un poco. tengo un div
que gira cuando se carga la página. Al pasar el mouse sobre él, me gustaría que se detuviera.
Aqui esta el guion
rotate(); //the function which rotates the div
$("#div2").hover(function() {
$("#div2").stop();
});
Aquí está mi página JS
var obj = "div2";
var angle = 0;
var interval = 2323;
increment = 5;
function rotate() {
$('#' + obj).css({
'-moz-transform': 'rotate(' + angle + 'deg)',
'msTransform': 'rotate(' + angle + 'deg)',
'-webkit-transform': 'rotate(' + angle + 'deg)',
'-o-transform': 'rotate(' + angle + 'deg)'
});
angle += increment;
setTimeout(rotate, interval);
}
3 Respuestas
3
Utiliza clearTimeout()
método. Como ejemplo:
var obj = "div2";
var angle = 0;
var interval = 100;
var increment = 5;
var timer = null;
function rotate() {
$('#' + obj).css({
'-moz-transform': 'rotate(' + angle + 'deg)',
'msTransform': 'rotate(' + angle + 'deg)',
'-webkit-transform': 'rotate(' + angle + 'deg)',
'-o-transform': 'rotate(' + angle + 'deg)'
});
angle += increment;
timer = setTimeout(rotate, interval);
}
$("#div2").hover(function() {
clearTimeout(timer);
}, function() {
rotate();
});
rotate(); //the function which rotates the div
contestado el 03 de mayo de 12 a las 20:05
Iba a proponer un booleano global que se verificaría dentro del rotate()
función y alternar con el hover
, pero su solución es mucho más elegante. +1 para usted señor. - PeligroMono
No funciona del todo bien. No gira cuando se carga la página, pero cuando paso el mouse por encima y luego retrocedo, gira ligeramente (quizás 5º). - user1104854
@user1104854 Tiene un incremento de ángulo del 5 % en 2.3 segundos. Intente disminuir el incremento de tiempo. Verifique la DEMO en la actualización de la respuesta. - Visión
Tienes razón, lo siento, me apresuré un poco con eso. No puedo creer que no me di cuenta de la hora. ¿Hay alguna forma de ralentizar gradualmente la animación en lugar de detenerla de inmediato? - user1104854
@ user1104854 Oh, esa es una historia absolutamente diferente :) Posiblemente tengas que usar otra timeout
para aumentar el intervalo y finalmente borrar todo timeouts
, pero será pesado. - Visión
3
var elm = $("#div2"),
angle = 0,
interval = 2323,
increment = 5,
T = setInterval(rotate, interval);
elm.on({
mouseenter: function () {
clearInterval(T);
},
mouseleave: function() {
T = setInterval(rotate, interval);
}
});
function rotate() {
elm.css({
'-moz-transform': 'rotate(' + angle + 'deg)',
'msTransform': 'rotate(' + angle + 'deg)',
'-webkit-transform': 'rotate(' + angle + 'deg)',
'-o-transform': 'rotate(' + angle + 'deg)'
});
angle += increment;
}
contestado el 03 de mayo de 12 a las 20:05
Gracias, este también funciona. ¿Hay alguna manera de "bajar" lentamente el setinteral y luego detenerlo? Decir del 1 al 2000 y luego parar? - user1104854
1
está haciendo su propia implementación de rotación, también tendrá que manejar la administración usted mismo, así que almacene en caché el setTimeout
objeto y uso clearTimeout
cuando necesitas pararlo
contestado el 03 de mayo de 12 a las 20:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript jquery or haz tu propia pregunta.
¿Realmente necesito indicar explícitamente que no se detendrá cuando esté flotando? - user1104854
Sí, lo hace, junto con cualquier otro detalle que nos ayude a ayudarlo: xbonez