2009-04-07 16 views
94

Estoy tratando de mover algunos elementos en la página, y durante el tiempo que la animación ocurre, quiero tener "overflow: hidden" aplicado a un elemento, y "overflow" volver a "auto" una vez que se completa la animación .¿Cómo puedo averiguar con jQuery si un elemento está siendo animado?

Sé jQuery tiene una función de utilidad que determina si un elemento está siendo animado pero no puedo encontrar en cualquier lugar en la documentación

+2

Use devoluciones de llamada para esta tarea. – Mork0075

Respuesta

189
if($(elem).is(':animated')) {...} 

Más información: http://docs.jquery.com/Selectors/animated


O bien:

$(elem) 
    .css('overflow' ,'hidden') 
    .animate({/*options*/}, function(){ 
     // Callback function 
     $(this).css('overflow', 'auto'); 
    }; 
+0

sí, eso fue todo, gracias. ¿Cómo podría extrañarlo? maldición, me estoy poniendo viejo –

+0

FYI, si no quieres arriesgarte a sobreescribir tus estilos CSS programando "overflow: auto" en la devolución de llamada, simplemente usa '.css ('overflow', '')'. Pasar una cadena vacía generalmente elimina esa propiedad del estilo del elemento por completo. No estoy seguro si esto es un comportamiento documentado, pero es un truco muy útil. –

+0

No creo que admita animaciones CSS. – Gqqnbig

5

Alternativamente , Para probar si algo no está animado, sólo tiene que añadir un "!":

if (!$(element).is(':animated')) {...} 
+0

Esto no es cierto ... Lo opuesto a jquery 'es' no es 'no'. 'no' elimina los elementos filtrados del objeto jquery. Si desea comprobar si hay un objeto no animado, haga 'if (! $ (Elemento) .is (': animado')) {...}' – amosmos

+1

@amosmos La respuesta fue editada y aprobada por la comunidad .. He rodado volver a donde estaba correcto. – Bill

+1

Genial, solo que ahora es un duplicado de la respuesta aceptada. Por cierto, ¿qué significa comunidad aprobada? – amosmos

-1

si está utilizando css animación y asigna la animación mediante el uso específico class name, a continuación, se puede comprobar de esta manera:

if($("#elem").hasClass("your_animation_class_name")) {} 

¡Pero asegúrese de que está eliminando el nombre de clase que maneja la animación, una vez que la animación haya finalizado!

Este código se puede utilizar para eliminar el class name después de la animación está acabado:

$("#elem").on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', 
function(){ 
     $(this).removeClass("your_animation_class_name"); 
}); 
+0

OP está utilizando jQuery animaiton. –

+0

simplemente sugiriendo una alternativa. ¿Y te refieres a la animación? – KeepMove

+0

Sí, quise decir animación. OMI tu respuesta está completamente fuera de tema. –

0
$('selector').click(function() { 
    if ($(':animated').length) { 
    return false; 
    } 

    $("html, body").scrollTop(0); 
}); 
+0

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre cómo y/o por qué soluciona el problema mejoraría el valor a largo plazo de la respuesta. Lea este [cómo-para-responder] (http://stackoverflow.com/help/how-to-answer) para proporcionar una respuesta de calidad. – thewaywewere

Cuestiones relacionadas