Indice del libro

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

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

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.