2008-10-30 16 views
47

Ich möchte ein Element und alle untergeordneten Elemente nach einer Verzögerung von ein paar Sekunden ausblenden. Ich habe jedoch keine Möglichkeit gefunden, anzugeben, dass ein Effekt nach einer bestimmten Zeitverzögerung gestartet werden soll.Verzögerung JQuery-Effekte

+1

Können Sie ein Beispiel geben, wenn die Kinder eines Elements nicht mit dem Element verblasst sind? – tvanfosson

+1

Sorry, mein Fehler, ich werde den Beitrag aktualisieren –

Antwort

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

Der 5000 ist fünf Sekunden in Millisekunden.

+3

Beachten Sie, dass dies Javascript verwendet eingebaute setTimeout-Funktion, nichts jQuery spezifisch. –

+0

Dies beantwortet nur teilweise seine Frage, denke ich. –

+0

Wenn die Kinder innerhalb des #foo Elements sind, sollten sie auch verblasst sein ... – swilliams

1

Sie können die Verwendung von setTimeout vermeiden, indem Sie die Methode fadeTo() verwenden und eine Verzögerung von 5 Sekunden einstellen.

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

macht diese Art von Block sehr CPU-intensiv im Vergleich zu setTimeout. Ich sehe den Vorteil nicht. - Warum ist der native Timer zu vermeiden? – redsquare

43

ich benutze diese Pause Plugin Ich schrieb

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

Nennen Sie es wie folgt aus:

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

Hinweis: Sie keinen Rückruf benötigen.


Edit: Sie sollten nun die jQuery 1.4. built in delay() Methode verwenden. Ich habe nicht überprüft, aber ich nehme an, es ist "klüger" als mein Plugin.

+0

Das hilft mir so sehr!Danke :-) – Jesse

+0

pass einfach auf, wenn jQuery jemals eine pause() -Funktion hinzufügt, denn es wird wahrscheinlich besser als meins sein! aber es ist gut, weg zu abstrahieren, was du so machst –

+0

kann jemand erklären, warum ich einen Rückruf nicht brauche? Ich bin mir nicht ganz sicher, warum das nicht sofort zurück –

1

Ich habe ein Plugin geschrieben, mit dem Sie eine Verzögerung in die Kette einfügen können.

zum Beispiel $ ('# div'). FadeOut(). Delay (5000) .fadeIn(); // Element ausblenden, 5 Sekunden warten, Element wieder einblenden.

Es werden keine Animations-Hacks oder übermäßige Callback-Verkettung verwendet, nur ein einfacher sauberer Kurzcode.

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

19

Zuvor würden Sie so etwas wie diese

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

tun Die erste belebt nichts zu tun, da Sie bereits Opazität 1 auf dem Elemente, aber es würde für die Zeit anhalten .

In jQuery 1.4 haben sie dies in das Framework integriert, so dass Sie den Hack nicht wie oben verwenden müssen.

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

Die Funktionalität ist das gleiche wie das Original jQuery.delay() Plugin http://www.evanbot.com/article/jquery-delay-plugin/4

11

Der beste Weg, mit Hilfe der jQuery Verzögerung Methode ist:.

$ ('# my_id') Verzögerung (2000). fadeOut (2000);

+2

jQuery 1.4 und höher –