2010-05-12 15 views
7

C'è un modo per dire se un elemento è nascosto o è attualmente in fase di occultamento (tramite un'animazione)? L'unico modo che posso pensare è di memorizzare una bandiera nell'elemento data quando si chiama show o hide, ma mi chiedevo se c'era un altro modo?Selettore jQuery per controllare se un elemento si anima in nascosto

+0

Come hai fatto a finire l'attuazione del presente? – alex

+0

Impostazione di un flag in 'data' all'avvio dell'animazione e controllo di nuovo per quel flag. – nickf

+0

@nickf Ah, una soluzione, ma non così elegante! Mi piacerebbe vederti lavorare con il selettore personalizzato :) – alex

risposta

1

Si ottiene quella nascosta con $(":hidden") e poi quelle che animano con $(":animated") e con il controllo del :animated.queue() se ha il metodo hide all'interno.

+0

Ho controllato la coda con questo codice: '$ el.slideUp ('slow'); console.log ($ el.queue()) 'e tutto ciò che conteneva era' ["in corso"] ' – nickf

+0

Beh, questo è tutto ciò che posso darti - probabilmente se hai controllato la fonte di jQuery potresti trovare un modo leggere delle voci dall'oggetto coda. –

3

si potrebbe fare un selettore jQuery personalizzato per esso

(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 (si può richiedere un po 'di test però).

Quindi basta aggiungere :hiding abbinerà elementi nascosti, e gli elementi che sono attualmente in corso di animazione a 0. Sarà ora solo partita elementi che stanno scomparendo, non apparire.

+0

questo è un buon inizio, ma penso che avrai problemi quando c'è più di un elemento. Vedi questo: http://jsbin.com/ojuro3/2/edit - fai clic sui paragrafi per farli dissolvere in dissolvenza. Ogni secondo, i nascondigli sono colorati in rosso e quelli che non nascondono in blu. – nickf

+0

@nickf Che dire di questo, se rimuovi l'elemento di controllo http://jsbin.com/ojuro3/3/edit – alex

1

È possibile controllare se l'elemento è animato come questo:

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