salve raga.
Volevo chiedere su per giù setInterval e setTimeout fanno la stessa cosa ma perchè con setTimeout va benissimo mentre con setInterval dopo un tot di cicli il browser va in palla se blocca???
salve raga.
Volevo chiedere su per giù setInterval e setTimeout fanno la stessa cosa ma perchè con setTimeout va benissimo mentre con setInterval dopo un tot di cicli il browser va in palla se blocca???
No..
seTimeOut('alert(messaggio)', 1000) esegue il codice una volta sola alert 1 volta dopo 1 secondo;
setInterval('alert(messaggio)', 1000) ripete il codice a intervalli regolari di un secondo..
setInterval lo devi gestire bene ... e usare clearInterval...
ehm, No, NON fanno la stessa cosa:
setInterval chiama ogni tot millisecondi la funzione, o l'istruzione passata.
setTimeout chiama UNA volta dopo tot millisecondi la funzione o l'istruzione passata.
Il motivo per cui il browser va in palla sarà perché ad ogni ciclo allochi delle risorse (crei un oggetto, variabili, array) senza mai liberarli dalla memoria (dato che resti sempre nello stesso ambiente di lavoro il Garbage Collector non libera le varibili dichiarate con il var) alla fine il browser satura la ram e crasha.
I DON'T Double Click!
e io cosa ho detto?? =)![]()
![]()
È che ho iniziato il messaggio prima che tu postassi...
I DON'T Double Click!
si raga avete ragione
non avevo pensato al fato di liberare una var
io creo una variabile data che ci creo un nuovo oggetto date
var data= new date();
ora come faccio a liberarla???
Poi quello che avete detto lo so cioè setinterval esegue un funzione a intervalli di tempo dicicamo così;
function prova(){
setInterval("prova()",1000);
}
è così????
ma allora che cmabia da questo???
function prova(){
setTimeout("prova()",1000);
}
a me sembra la stessa cosa
e perchè la dichiarazione della variabile data con setTimeout non crasha?????
Es.:
crasha con setInterval
function tempo(){
var data= new date();
var ora= data.getHours();
var minuti= data.getMinutes();
setInterval("tempo()",1000);
}
così va in palla
mentre così no:
function tempo(){
var data= new date();
var ora= data.getHours();
var minuti= data.getMinutes();
setTimeout("tempo()",1000);
}
no ecco, setInterval devi chiamarlo UNA volta e basta, poi ogni tot la funzione viene rilanciata:
var data, ora, minuti;
function tempo(){
data= new date();
ora= data.getHours();
minuti= data.getMinutes();
//Fai quello che vuoi
}
setInterval(tempo, 1000);
Quello che fai tu chiama OGNI secondo una funzione che incomincia un ciclo infinito che incomincia un ciclo infinito, in modo esponenziale.
I DON'T Double Click!
quindi è questo il motivo percui andava in crash il browser si appesantiva ogni volta della stessa funzione
quindi se vorrei fare un conteggio di un orario faccio così:
in un file esterno "js.js"
function orario(){
var data= new Date();
var ora=data.getHours();
var minuti=data.getMinutes();
var secondi=data.getSeconds();
var elemento= document.getElementById("valoreorario");
elemento.innerHTML=ora+":"+minuti+":"+secondi;
}
setInterval(orario(),1000);
file index.html
<script type/text/javascript" language="javascript" src="js.js"></script>
</head>
<body>
<span id="valoreorario"></span>
...
credi che va bene così????
ok funziona ma come potrei fare in modo che i secondi da 1 a 9 compare solo 1 - 2 - 3 etc... se nza lo 0 come potrei fargli comparire lo 0 davanti???
o porvato con questo:
if(secondi.length==1) secondi="0"+secondi;
ma mi da undefinied