2010-12-14 11 views
13

Grüße alle i JQuery Schlaf machen wollen/warten auf eine Sekunde zwischen zwei FunktionenSchlaf in JQuery?

$('#div1').hide(); 
//sleep or wait or for a sec 
$("#div2").show(); 

, wie dies zu tun?

+0

was [.delay()] (http://api.jquery.com/delay/)? – Kimtho6

Antwort

34

Für Ihre spezifische Funktion .show() nicht die Warteschlange gestellt wird, aber es gibt einen einfachen Trick es so können Sie .delay(), wie diese verwenden, um die Warteschlange gestellt:

$('#div1').hide(); 
$("#div2").delay(1000).show(0); 

Indem sie eine 0 Dauer Argument, es ist jetzt ein sofortige, aber eingereihte Animation. Darunter verwendet setTimeout(), so ist es im Grunde das gleiche Verhalten wie:

$('#div1').hide(); 
setTimeout(function() { $("#div2").show(); }, 1000); 
+1

Große Antwort, +1. –

+0

Was ist mit dem Anzeigen der div2 und warten Sie auf eine Sekunde, dann zeigen Sie eine andere div3 oder andere JQuery-Code, ist das Verhalten in diesem Fall anders? –

+0

@ sword101 - Es hängt davon ab, was Sie hier wollen, versuchen Sie etwas Generisches zu tun, oder durchlaufen Sie eine Reihe von Elementen? Wenn man ein einfaches '.each() 'und der Index zu nehmen und ihn für eine Dauer mit 1000 zu multiplizieren, funktioniert beispielsweise gut. –

6

Hier geht's!

$('#div1').hide(); 
//sleep or wait or for a sec 
setTimeout('moomoo()', 1000); 

function moomoo() { 
    $("#div2").show(); 
} 
+0

+1: Schöne Erklärung –

+0

Ihre zweite 'setTimeout' wird nicht funktionieren. Es benötigt eine Funktionsreferenz, so dass Sie die Klammer nach 'moomoo' überspringen müssen. – jAndy

+1

Sie können anonyme Funktion dort haben, wird die Notwendigkeit in "Proxy" -Funktion speichern. :) –

-1

Keine wirkliche Schlaf, aber das wird das gleiche Ziel erreichen:

$('#div1').hide(); 
//sleep or wait or for a sec 
window.setTimeout(function() { $("#div2").show(); }, 1000); 

Edit: na ja, ich jetzt stehe korrigiert zu „echten“ Schlaf, aber die setTimeout mit noch gültig ist „reine JS "Lösung - Ihre Wahl. :)

3

Folgendes sollte das tun, was Sie wollen:

$("#div1").hide(); 
$("#div2").delay(1000).show(0); 
+0

Dies funktioniert nicht, da '.show()' keine Warteschlange ist. –

+0

Sie haben absolut Recht, ich habe vergessen, die Dauer hinzuzufügen. Danke für die Korrektur! –

1

Sie können die Ausführung des Codes zwischen den Anrufen nicht nur pausieren. Das würde bedeuten, dass der Browser die Änderung, die durch den hide Aufruf verursacht wird, nicht anzeigen wird, da keine Aktualisierungen vorgenommen werden, während der Code ausgeführt wird. Der Code würde scheinbar nichts tun.

Verwenden Sie den setTimeout Methodencode zu planen, zu einem späteren Zeitpunkt ausgeführt werden:

$('#div1').hide(); 
window.setTimeout(function(){ 
    $("#div2").show(); 
}, 1000); 

Dadurch wird das Element gesetzt, wie versteckt und den Code planen, es zu zeigen später zu beginnen. Der Code wird nach dem Aufruf setTimeout fortgesetzt, damit die Funktion beendet werden kann und der Browser die Steuerung zurückerhält, sodass das Element tatsächlich ausgeblendet werden kann.