2013-06-01 29 views
11

Mam plik javascript, aw kilku miejscach chcę dodać małe opóźnienie, więc skrypt osiągnie ten punkt, poczekaj 3 sekundy, a następnie kontynuuj z resztą kodu. Najlepszym sposobem na zrobienie tego było stworzenie funkcji, którą mógłbym wywołać z dowolnego miejsca w skrypcie.Jak utworzyć funkcję opóźnienia javascript

function startDelay(lengthOfDelay) 
{ 
//code to make it delay for lengthOfDelay amount of time 
} 

Nie mogę jednak znaleźć sposobu na zaimplementowanie kodu, aby mógł on czekać. Spojrzałem na setTimeout, ale trzeba było mocno zakodować w nim funkcję, co sprawiło, że nie było to dla mnie dobre.

Czy jest jakiś sposób, że mogę uzyskać skrypt, aby przerwać na kilka sekund? Nie mam problemu z zawieszaniem interfejsu użytkownika, gdy kod jest wstrzymany.

Jeśli nie, czy istnieje sposób, w jaki mogę skorzystać z PHP sleep(), aby to osiągnąć? (Wiem, że PHP jest po stronie serwera, a JavaScript po stronie klienta, ale być może istnieje sposób, o którym nie słyszałem.)

+2

Najprostszym sposobem jest użycie [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout) i wykonanie pozostałego kodu w funkcji, którą podajesz do setTimeout. –

+1

http://stackoverflow.com/questions/10312963/javascript-settimeout – smerny

Odpowiedz

30

Nie trzeba używać anonimowej funkcji z setTimeout. Możesz zrobić coś takiego:

setTimeout(doSomething, 3000); 

function doSomething() { 
    //do whatever you want here 
} 
+0

Jak utworzyć funkcję taką jak startDelay (lengthOfDelay), którą mógłbym wywołać z ** gdziekolwiek ** w skrypcie i zlecić jej wykonanie następnie kod, a nie tylko _ // rób, co chcesz tutaj_? – user2370460

+0

Nie jestem do końca pewien, co dokładnie chcesz zrobić. Czy chcesz zatrzymać wykonywanie strony lub zaplanować funkcję, która zostanie wykonana po opóźnieniu? – Kassem

+0

@Kassem Myślę, że on oznacza np. co jeśli chcesz konsoleta.logować co sekundę za pomocą pętli for? tj. 'while (true) {[funkcja opóźnienia, z włączeniem console.log]}' Nie sądzę, aby twoja funkcja działała sekwencyjnie. – geotheory

2

Ah tak. Witamy w realizacji asynchronicznej.

Zasadniczo wstrzymanie skryptu spowoduje, że przeglądarka i strona przestaną odpowiadać przez 3 sekundy. To jest okropne dla aplikacji internetowych, więc nie jest obsługiwane.

Zamiast tego trzeba myśleć "opartego na zdarzeniach". Użyj funkcji setTimeout, aby wywołać funkcję po pewnym czasie, który będzie nadal uruchamiał JavaScript na stronie w tym czasie.

+1

Czy jest jakiś sposób to zrobić? Sprawienie, że strona przestanie reagować, jest dla mnie pozytywną rzeczą! – user2370460

+1

fortunatelly tak: sleep.js http: // stackoverflow.com/a/16873849/667927 –

0

Można utworzyć opóźnienie stosując następujący przykład

setInterval(function(){alert("Hello")},3000); 

Wymień z # z milisekund

Można umieścić zawartość co chcesz wykonywane wewnątrz funkcji.

+5

Ta odpowiedź jest nieco pomijana (chyba), ponieważ setInterval będzie działał co 3 sekundy, nie tylko raz. –

+0

@AdamDavis Przetestowałem tę metodę i nie napotkałem żadnych problemów. Jeśli Ty lub ktoś inny przetestuje to i zademonstrujesz inaczej, powiadom społeczność. Dzięki –

+0

@CBC_NS Właśnie wypróbowałem to i także miałem to powtarzające się co 3 sekundy. Handy pamiętać o tym. –

Powiązane problemy