JavaScript/Timer
Un'interessante funzionalità offerta da JavaScript nonché indispensabile per rendere una pagina dinamica in molte occasioni, è quella dei cosiddetti timer.
Grazie ad essi possiamo far effettuare un'istruzione ad intervalli regolari o dopo un numero prestabilito di secondi.
One-shot timer
[modifica | modifica sorgente]Per one-shot timer, o timeout, si intendono quei timer che permettono di eseguire un'istruzione dopo un determinato numero di millisecondi. Il metodo setTimeout
dell'oggetto window
prende come parametri una stringa contenente l'istruzione da eseguire e il numero di secondi dopo i quali deve essere eseguita. Ad esempio:
var tim = setTimeout('alert("ciao!")', 3000); //l'oggetto window può essere sottinteso
Inserendo questa istruzione al caricamento della pagina, dopo 3 secondi (3000 millisecondi) verrà visualizzato un messaggio di alert.
Attenzione: i timeout non interrompono il normale flusso degli script. Ad esempio:
var tim = setTimeout('alert("ciao!")', 3000);
alert("secondo alert");
In questo caso verrà mostrato prima il secondo alert in quanto l'esecuzione del primo è ritardata di tre secondi.
Nella stringa è possibile anche inserire una funzione, ovviamente.
Il metodo setTimeout restituisce un ID numerico che identifica univocamente ciascun timer impostato; questo è utile in relazione al metodo clearTimeout()
che elimina il timeout impostato con il metodo visto precedentemente. Questo può servire per permettere all'utente di fermare un timer già iniziato. Ad esempio:
var tim = setTimeout('alert("la bomba è esplosa")', 3000); //la bomba esploderà tra 3 secondi
var pwd = prompt("se inserisci la password corretta potrai disinnescare la bomba prima che esploda....");
if (pwd == "disattiva") {
clearTimeout(tim); //disinnesca il timer (la "bomba")
}
Impostare intervalli regolari
[modifica | modifica sorgente]Diversi dai timeout sono quei timer che impostano azioni da eseguire ad intervalli regolari. Ad esempio:
var tim = setInterval ("aggiornaPagina()", 1000);
Con questa istruzione facciamo sì che la funzione aggiornaPagina
venga eseguita ogni secondo. Come per i timeout, possiamo eliminare i timer ricorrendo ad un'apposita funzione:
clearInterval(tim);
che interrompe l'esecuzione del timer precedentemente avviato.