Aceste doua functii JavaScript, setTimeout() si setInterval() sunt des utilizate, fiind necesare mai ales in script-uri pentru efecte de miscare, lucru cu perioade de timp si altele.
- Ce fac setTimeout() si setInterval()? Acestea pot determina executia unei functii la un anumit intervaal de timp.
Sintaxa (forma) generala de utilizare a lor este urmatoarea:
setTimeout("functie()", timp) respectiv setInterval("functie()", timp)
- Unde, "functie()" este functia care va fi apelata, iar "timp" este un numar ce reprezinta intervalul de timp (in miimi de secunda) la care va fi apelata functia.
Desi pot parea asemanatoare, diferenta dintre ele este destul de importanta.
<div id="id_tag">Aici va apare valoarea adaugata de functia JS</div>- Acest script va avea urmatorul rezultat. Click pe si asteptati 2 secunde.
<script type="text/javascript"><!--
var nr = 0; // Variabila ce va fi incrementata
// Functia care e apelata
function functie() {
nr++; // Incrementeaza var nr cu o unitate
document.getElementById('id_tag').innerHTML = nr; // Adauga valoarea lui nr in tag-ul cu id="id_tag"
}
// Apeleaza functia dupa 2 secunde (se trece timpul in miimi de secunde, adica 2000)
setTimeout("functie()", 2000);
//--></script>
Aici va apare valoarea adaugata de functia JS
<div id="id_tag">Aici va apare valoarea adaugata de functia JS</div>- Acest script va da urmatorul rezultat. Click pe si observati dupa 2 sec.
<script type="text/javascript"><!--
var nr = 0; // Variabila ce va fi incrementata
// Functia care e apelata
function functie() {
nr++; // Incrementeaza var nr cu o unitate
document.getElementById('id_tag').innerHTML = nr; // Adauga valoarea lui nr in tag-ul cu id="id_tag"
}
// Apeleaza functia, repetat, la interval de 2 secunde (se trece timpul in miimi de secunde, adica 2000)
setInterval("functie()", 2000);
//--></script>
- Vedeti diferenta dintre rezultatele celor doua exemple. In primul, cu "setTimeout()" functia este executata o singura data, dupa 2 secunde, iar in al doilea, cu "setInterval()", functia este apelata tot dupa 2 secunde, dar apelarea continua si se repeta la fiecare 2 secunde, incrementand si afisand mereu variabila "nr".Aici va apare valoarea adaugata de functia JS
<div id="id_tag">Aici va apare valoarea adaugata de functia JS</div>- Acest script va afisa urmatorul rezultat. Click pe , urmariti dupa 2 secunde, iar pe pt. a opri auto-apelarea.
Buton de oprire: <button onclick="functie(0)">Stop</button>
<script type="text/javascript"><!--
var nr = 0; // Variabila ce va fi incrementata
var stp = 1; // Variabila prin care se controleaza oprirea
// Functia care e apelata
function functie(parm) {
// Daca parametrul "parm" are valoarea 0 (primita de la butonul "Stop"), seteaza stp=0
// Determina ne executarea codului din urmatorul "if()", unde e si auto-apelarea
if(parm==0) { stp = 0; }
// Codul urmator se executa doar daca stp=1
if(stp==1) {
nr++; // Incrementeaza var nr cu o unitate
document.getElementById('id_tag').innerHTML = nr; v // Adauga valoarea lui nr in tag-ul cu id="id_tag"
// Auto-apeleaza functia dupa 2 secunde (cu parametru 1)
setTimeout("functie(1)", 2000);
}
}
// Apeleaza functia dupa 2 secunde (cu parametru 1)
setTimeout("functie(1)", 2000);
//--></script>
Aici va apare valoarea adaugata de functia JS
Lucrurile cu aceste functii se pot complica atunci cand functiile ce trebuie apelate au mai multi parametri.
1. Trebuie tinut cont de tipul parametrului, daca e sir (string) trebuie pus la apelare intre ghilimele, iar daca e un numar (integer) fara ghilimele.
2. De asemenea trebuie tinut cont ca functiile sunt apelate in cadrul unui sir, dupa sintaxa:
setTimeout("functie()", timp) respectiv setInterval("functie()", timp)
- Daca parametri sunt niste variabile, trebuie adaugati in interiorul sirului, intre acolade, prin concatenare cu operatorul "+", astfel, in cazul apelarii cu parametri, sintaxa generala devine:
setTimeout("functie("+parm1+", "+parm2+")", timp) respectiv
setInterval("functie("+parm1+", "+parm2+")", timp)
Iata un exemplu practic, in care trebuie afisata dupa 2 sec. o fereastra Alert cu un sir si un numar, care sunt preluate din variabile.
<script type="text/javascript"><!--- Valoarea lui "parm1" fiind un sir, concatenarea a fost facuta in asa fel (si cu alte ghilimele, simple) incat la apelare valoarea sa fie transmisa ca sir, iar pentru "parm2" care e un numar nu trebuie sa fie transmis intre alte ghilimele.
// Variabilele ce vor fi transmise functiei
var sir = 'Tutoriale JavaScript';
var nr2 = 8;
function set_alert(parm1, parm2) {
// Afiseaza fereastra Alert cu parametri primiti
alert(parm1+' - '+parm2);
}
// Apeleaza functia dupa 2 sec., transferand ca parametri cele 2 variabile
setTimeout("set_alert('"+sir+"', "+nr2+")", 2000);
//--></script>