2013-06-01 30 views
11

Ho un file javascript, e in diversi punti voglio aggiungere un piccolo ritardo, quindi lo script raggiungerà quel punto, attenderà 3 secondi, quindi proseguirà con il resto del codice. Il modo migliore che ho pensato di fare questo è stato quello di creare una funzione, che potrei chiamare da qualsiasi punto della sceneggiatura.Come creare la funzione di ritardo javascript

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

Tuttavia, non riesco a trovare un modo per implementare il codice per renderlo aspettare. Ho dato un'occhiata a setTimeout, ma era necessario codificare la funzione in esso, il che non mi rendeva utile.

C'è un modo per consentire allo script di interrompere la pausa per alcuni secondi? Non ho alcun problema con il congelamento dell'interfaccia utente mentre il codice è in pausa.

In caso contrario, è possibile utilizzare PHP sleep() per raggiungere questo obiettivo? (So ​​che PHP è lato server e Javascript è lato client, ma forse c'è un modo che non ho sentito.)

+2

Il modo più semplice è usare [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout) e fare il resto del codice nella funzione che dai per impostare Timeout. –

+1

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

risposta

30

Non è necessario utilizzare una funzione anonima con setTimeout. Puoi fare qualcosa del genere:

setTimeout(doSomething, 3000); 

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

Come potrei creare una funzione come startDelay (lengthOfDelay) che potrei chiamare da ** anywhere ** nello script e farmi fare il resto del codice dopo, non solo _ // fai quello che vuoi qui_? – user2370460

+0

Non sono proprio sicuro di cosa vuoi fare esattamente. Vuoi interrompere l'esecuzione della pagina o programmare una funzione che verrà eseguita dopo un ritardo? – Kassem

+0

@ Kassem Penso che (s) egli intende ad es. cosa succede se vuoi console.log un messaggio ogni secondo usando un ciclo for? Ad esempio 'while (true) {[una funzione di ritardo, incorporando console.log]}' Non penso che la tua funzione verrà eseguita in sequenza. – geotheory

2

Ah sì. Benvenuto nell'esecuzione asincrona.

Fondamentalmente, mettere in pausa uno script causerebbe la mancata risposta del browser e della pagina per 3 secondi. Questo è orribile per le app Web e quindi non è supportato.

Invece, devi pensare "basato sugli eventi". Usa setTimeout per chiamare una funzione dopo un certo periodo di tempo, che continuerà a eseguire il JavaScript sulla pagina durante quel periodo.

+1

C'è un modo per farlo? Rendere la pagina insensibile in realtà è una cosa positiva per me! – user2370460

+1

fortunatamente sì: sleep.js http: // stackoverflow.it/a/16873849/667927 –

0

È possibile creare un ritardo utilizzando il seguente esempio

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

Sostituire con ° millisecondi

È possibile inserire il contenuto di ciò che si desidera eseguito all'interno della funzione.

+5

Questa risposta è leggermente carente (credo) perché setInterval continuerà a funzionare ogni 3 secondi, non solo una volta. –

+0

@AdamDavis Ho testato questo metodo e non ho riscontrato alcun problema. Se tu o qualcun altro testate questo e dimostrate il contrario, fatelo sapere alla comunità. Grazie –

+0

@CBC_NS L'ho appena provato e l'ho ripetuto ogni 3 secondi. Comodo da tenere a mente però. –