2010-05-12 10 views
7

¿Hay alguna forma de saber si un elemento está oculto o está en proceso de ocultarse (mediante una animación)? La única forma en que puedo pensar para hacerlo es almacenar una bandera en el elemento data cuando llamas al show o hide, pero me preguntaba si había otra manera.selector jQuery para verificar si un elemento se está animando a oculto

+0

Cómo acabaste la aplicación de esta? – alex

+0

Estableciendo un indicador en 'datos' cuando se inicia la animación, y buscando nuevamente esa marca. – nickf

+0

@nickf Ah, una solución, ¡pero no tan elegante! Me encantaría verte hacer que el selector personalizado funcione :) – alex

Respuesta

1

de que tienes el escondida con $(":hidden") y luego los Animación con $(":animated") y con la verificación de la :animated.queue() si se tiene el método hide interior.

+0

Comprobé la cola con este código: '$ el.slideUp ('slow'); console.log ($ el.queue()) 'y todo lo que tenía en ella era' ["en progreso"] ' – nickf

+0

Bueno, eso son todos los indicadores que puedo darte - probablemente si revisaste la fuente de jQuery podrías encontrar una manera para leer de las entradas del objeto de cola. –

3

podrías hacer un selector de jQuery personalizado para ello

(function($) { 
    var endOpacity, 
     oldStep = jQuery.fx.step.opacity; 

    $.fx.step.opacity = function(fx) { 
     endOpacity = fx.end; 

     return oldStep(fx); 
    }; 

$.expr[':'].hiding = function(obj){ 
    var $this = $(obj); 

    return ($this.is(':hidden') || ($this.is(':animated') && endOpacity === 0)); 
}; 

})(jQuery); 

This worked for me (que puede requerir algunas pruebas más, aunque).

Entonces sólo tiene que añadir :hiding que coincidirá con elementos ocultos, y los elementos que actualmente están siendo animados a 0. Ahora única elementos de los partidos que están desapareciendo, no aparece.

+0

este es un buen comienzo, pero creo que llegará a problemas cuando haya más de un elemento. Vea esto: http://jsbin.com/ojuro3/2/edit - haga clic en los párrafos para que se desvanezcan y desaparezcan. Cada segundo, los que se esconden son de color rojo, y los que no se esconden son azules. – nickf

+0

@nickf ¿Qué pasa con esto, si elimina el elemento de verificación http://jsbin.com/ojuro3/3/edit – alex

1

Puede comprobar si el elemento está animado como esto:

if(!$('.your-element').is(':animated')) { 
    // do animation... 
} else { 
    return false; 
} 
Cuestiones relacionadas