Estoy tratando de tener una animación solo cuando el mouse está sobre un objeto. Puedo obtener una iteración de la animación y luego hacer que vuelva a la normalidad con el mouse. Pero me gustaría que la animación bucle en mouseover. ¿Cómo lo haría, usando setInterval? Estoy un poco atrapado.jquery animación continua en mouseover
Respuesta
Se podría hacer de esta manera:
$.fn.loopingAnimation = function(props, dur, eas)
{
if (this.data('loop') == true)
{
this.animate(props, dur, eas, function() {
if($(this).data('loop') == true) $(this).loopingAnimation(props, dur, eas);
});
}
return this; // Don't break the chain
}
Ahora, usted puede hacer esto:
$("div.animate").hover(function(){
$(this).data('loop', true).stop().loopingAnimation({ left: "+10px"}, 300);
}, function(){
$(this).data('loop', false);
// Now our animation will stop after fully completing its last cycle
});
Si quería la animación inmediatamente parada, se puede cambiar la línea hoverOut
para leer :
$(this).data('loop', false).stop();
setInterval
devuelve una identificación que se puede pasar a clearInterval
para desactivar el temporizador.
Puede escribir lo siguiente:
var timerId;
$(something).hover(
function() {
timerId = setInterval(function() { ... }, 100);
},
function() { clearInterval(timerId); }
);
Considere:
<div id="anim">This is a test</div>
con:
#anim { padding: 15px; background: yellow; }
y:
var over = false;
$(function() {
$("#anim").hover(function() {
over = true;
grow_anim();
}, function() {
over = false;
});
});
function grow_anim() {
if (over) {
$("#anim").animate({paddingLeft: "100px"}, 1000, shrink_anim);
}
}
function shrink_anim() {
$("#anim").animate({paddingLeft: "15px"}, 1000, grow_anim);
}
Puede lograr esto usando temporizadores también.
Solución fría. Todavía soy un novato en JS. ¿Cómo podría hacer esto genérico así que si tuviera varias animas, asumiría que pasaría la identificación en la función y luego la llamaría cada vez para cada tipo? ¿Puede la función() parte tomar parámetros, y si lo llamara para cada tipo, es realmente la mejor solución? –
Necesitaba esto para trabajar para más de un objeto en la página, así que modifiqué un poco de código de Cletus:
var over = false;
$(function() {
$("#hovered-item").hover(function() {
$(this).css("position", "relative");
over = true;
swinger = this;
grow_anim();
}, function() {
over = false;
});
});
function grow_anim() {
if (over) {
$(swinger).animate({left: "5px"}, 200, 'linear', shrink_anim);
}
}
function shrink_anim() {
$(swinger).animate({left: "0"}, 200, 'linear', grow_anim);
}
- 1. jQuery se mouseDown en mouseover
- 2. Shift + mouseover con jQuery
- 3. jQuery mousedown continua
- 4. Knockoutjs bind mouseover o Jquery
- 5. jquery delegate() eventos (mouseover mouseover) se dispara dos veces
- 6. jQuery frontera animación
- 7. mouseover() mouseout() jQuery add/removeClass problema
- 8. jQuery alternar sobre el mouseover - evitar cola
- 9. jQuery mouseover link para mostrar div oculto
- 10. Un "si mouseover" o un "do while mouseover" en JavaScript/jQuery
- 11. jQuery animación detectar si la animación?
- 12. jQuery - ¿Animación de interrupción?
- 13. Animación: jQuery o Raphael?
- 14. jQuery animación de palanca
- 15. jQuery animación de opacidad
- 16. Jquery: evento mouseover en el área de mapa de imagen
- 17. ¿Alguna ventaja de pasar el mouse sobre mouseover en JQuery?
- 18. retraso Tricky en mouseover
- 19. mouseover while mousedown
- 20. Desactivar animación CSS3 con jQuery?
- 21. jQuery .slideUp() omite la animación
- 22. animación jquery de atributos específicos
- 23. Cambiar la velocidad de animación de Jquery UI Accordion
- 24. ¿Cómo agregamos la animación css + en jquery?
- 25. Colas de animación jQuery en varios elementos
- 26. Animación de texto Glitchy en jQuery
- 27. Problema con la animación desigual en jQuery
- 28. jQuery animación de texto carga
- 29. Reemplazar MouseOver con .hoverIntent
- 30. Botón Animar en MouseOver y MouseDown
que tenía que cambiar mi respuesta debido a problemas satisfechas con la recursividad. Parece que no puedo obtener tu respuesta para trabajar con el método loopingAnimation: si lo cambio a "animar", se realiza una iteración. –
Doug, a la llamada * animate * le faltaba el paréntesis de cierre, así que lo agregué pero no fue suficiente para guardar, ya que necesita al menos 6 modificaciones de caracteres, así que he sangrado su código para ese fin. FYI. –