\(\renewcommand{\vec}[1]{\mathbf{#1}} \DeclareMathOperator*{\sijoitus}{\Big/} \newcommand{\eval}[2]{\sijoitus_{\kern-0.7em#1}^{\kern0.7em#2}\!} \)

Tehtävien ajastus ja rekursio setTimeout

Tietokone suorittaa tehtävänsä valtavan nopeasti. Joskus on tarvetta hidastaa tahtia, jotta hitaat ihmiset pääsevät mukaan tapahtumiin.

JavaScriptissä haluttu hidastus saadaan valmiilla metodilla setTimeout("tehtävä", aika millisekunteina).

Tässä yhteydessä käytetään tavallisesti rekursiota, joka tarkoittaa sitä, että funktio kutsuu itse itseään, jolloin syntyy loppumaton funktion toisto, ellei kiertoa ohjelmoida loppumaan jossakin vaiheessa. Toisto saadaan loppumaan myös komennolla clearTimeout().

Kun haluat tulostaa näytölle jotakin, kannattaa useimmiten käyttää komentoa getElementById("elementin_id").innerHTML = "tulostettava juttu". Tällöin tulostus ilmestyy haluamasi elementin sisään.

Alla on yksinkertainen esimerkki laskurista, joka tulostaa luvut näytölle sekuntin välein:

KoodiKoodin tulos
<script type="text/javascript"> var luku = 0; // ajastin-muuttujan avulla toisto saadaan loppumaan. var ajastin; kasvata_lukua(); function kasvata_lukua() { luku = luku+1; document.getElementById("laskuri").innerHTML = luku; ajastin = setTimeout("kasvata_lukua()",1000); } // Tämä pysäyttää laskurin: function pysayta_laskuri() { clearTimeout(ajastin); } </script>

Tämän lisäksi yllä tarvitaan laskuri-elementti ja painikkeet "Käynnistä laskuri" ja "Pysäytä laskuri":

<button type="button" onclick="kasvata_lukua()">Käynnistä laskuri</button> <button type="button" onclick="pysayta_laskuri()">Pysäytä laskuri</button> <div id = "laskuri" style="font-size: 5cm"></div>