2008-10-30 12 views
47

Desidero sfumare un elemento e tutti i relativi elementi figlio dopo un ritardo di alcuni secondi. ma non ho trovato un modo per specificare che un effetto debba iniziare dopo un intervallo di tempo specificato.delay Effetti JQuery

+1

Puoi dare un esempio di quando i figli di un elemento non sono sbiaditi con l'elemento? – tvanfosson

+1

Mi spiace, errore mio, aggiornerò il post –

risposta

77
setTimeout(function() { $('#foo').fadeOut(); }, 5000); 

Il 5000 è cinque secondi in millisecondi.

+3

Nota che questo utilizza la funzione setTimeout integrata di Javascript, nessuna specifica di jQuery. –

+0

Questo risponde solo parzialmente alla sua domanda, penso. –

+0

Se i bambini sono all'interno dell'elemento #foo, dovrebbero essere sbiaditi anche ... – swilliams

1

È possibile evitare l'uso di setTimeout usando il metodo fadeTo() e impostando un ritardo di 5 secondi su quello.

$("#hideAfterFiveSeconds").click(function(){ 
    $(this).fadeTo(5000,1,function(){ 
    $(this).fadeOut("slow"); 
    }); 
}); 
+0

fare questo tipo di blocco è molto intenso rispetto alla cpu setTimeout. Non vedo il vantaggio. - Perché è necessario evitare il timer nativo? – redsquare

43

Io uso questo plugin di pausa che ho appena scritto

$.fn.pause = function(duration) { 
    $(this).animate({ dummy: 1 }, duration); 
    return this; 
}; 

chiamare in questo modo:

$("#mainImage").pause(5000).fadeOut(); 

Nota: non è necessario un callback.


Edit: Ora si dovrebbe utilizzare il metodo jQuery 1.4. built in delay(). Non ho controllato ma presumo che sia più 'intelligente' del mio plugin.

+0

Questo mi aiuta così tanto!Grazie :-) – Jesse

+0

fai attenzione se jQuery aggiunge mai una funzione di pausa() perché probabilmente sarà meglio della mia! ma è buono per astrarre ciò che stai facendo come questo –

+0

qualcuno può spiegare PERCHÉ non ho bisogno di una richiamata? Non sono del tutto sicuro del motivo per cui non viene restituito immediatamente –

1

Ho scritto un plug-in per consentire di aggiungere un ritardo alla catena.

ad esempio $ ('# div'). FadeOut(). Delay (5000) .fadeIn(); // dissolvenza dell'elemento, attendere 5 secondi, dissolvenza dell'elemento.

Non utilizza alcun hack di animazione o concatenamento di callback eccessivo, solo un semplice codice breve pulito.

http://blindsignals.com/index.php/2009/07/jquery-delay/

19

In precedenza si farebbe qualcosa di simile

$('#foo').animate({opacity: 1},1000).fadeOut('slow'); 

Il primo animato non sta facendo nulla dal momento che si dispone già di opacità 1 sull'elemento, ma sarebbe una pausa per la quantità di tempo .

In jQuery 1.4, hanno integrato questo framework nel framework in modo da non dover utilizzare l'hack come sopra.

$('#foo').delay(1000).fadeOut('slow'); 

La funzionalità è la stessa come l'originale jQuery.delay() plug http://www.evanbot.com/article/jquery-delay-plugin/4

11

Il modo migliore è quello di utilizzare il metodo di ritardo di jQuery:.

$ ('# my_id') ritardo (2000). fadeOut (2000);

+2

jQuery 1.4 e versioni successive –