http://Tafaz.altervista.org
Timer e Intervalli in Javascript
Stella PienaStella PienaStella PienaStella PienaStella Vuota - 503 voti - 1432 visite

Spesso quando si scrive del codice Javascript si ha la necessità di attendere del tempo tra l'esecuzione di un'instruzione ed un'altra, ad esempio attendere il caricamento di un'immagine quando si usa l'oggetto Image, per ottenere questo spesso si incappa nell'errore comune di eseguire un ciclo che attende la verifica di una condizione come nel listato seguente:


<script type="text/javascript">
img = new Image();
img.src = "preload.gif";
while(img.loaded!=true){
}
</script>


Non essendo Javascript MultiThread questo ciclo while eseguirà un loop infinito che blocca il browser dell'utente facendo aumentare l'uso della CPU al 100%.

Per evitare questo problema si deve usare la funzione setTimeout che imposta un timer in millisecondi e allo scadere di questi esegue un'istruzione e la inseriremo in una funzione ricorsiva


<script type="text/javascript">
var idTimer;
img = new Image();
img.src = "preload.gif";
isLoaded(img);

function isLoaded(img){
if(img.complete!=true){
idTimer = setTimeout('isLoaded(img)',50);
} else {
alert('Immagine caricata');
}
}
</script>


in questo modo istanziamo l'oggetto Image e gli assegniamo il source dell'immagine da caricare, poi richiamiamo la funzione isLoaded passandogli come parametro l'istanza img. Questa funzione verifica se l'immagine è completamente caricata verificando che la proprietà complete sia impostata a true e in tal caso viene visualizzato un messaggio, altrimenti viene impostato un timer che richiama la funzione isLoaded in modo ricorsivo dopo 50 millisecondi.

Esiste la possibilità di interrompere il timer usando la funzione clearTimeout(idTimer);.

Detto questo potremmo avere l'esigenza di eseguire una determinata istruzione ripetutamente ad un intervallo specificato (sempre in millisecondi), come ad esempio visualizzare un orologio che si aggiorna ogni secondo:


<script type="text/javascript">
idIntervallo = setInterval('ora()', 1000);

function ora() {
time=new Date()
document.forms['orologio'].orario.value=time;
}
</script>
<form name="orologio" action="" method="POST">
<input name="orario" type="text" size="50" />
</form>


in questo modo ad ogni secondo verrà richiamata la funzione ora che aggiorna il valore del campo di testo orario scrivendoci l'ora corrente.

Per interrompere l'esecuzione ad intervalli di questa funzione dobbiamo chiamare clearInterval(idIntervallo); passando come parametro l'id che ci viene ritornato dalla chiamata idIntervallo = setInterval('ora()', 1000);.


Ritorna alla pagina Articoli

COMMENTI

Aggiungi un commento!
(I commenti verranno moderati prima della pubblicazione)


PHP Powered  Smarty Powered  MySQL Powered  Valid XHTML 1.0 Transitional  Valid CSS!  View Matteo Tinazzi's profile on LinkedIn

Logo Licenza Creative Commons  


Grafica realizzata da DrMarvel^