Barevné hodiny pomocà setInterval
VytvoÅte barevné hodiny, jako jsou tyto:
Styly nastavte pomocà HTML/CSS, JavaScript bude jen aktualizovat Äas v elementech.
Nejprve vytvoÅme HTML/CSS.
Každá komponenta hodin bude vypadat skvÄle ve svém vlastnÃm <span>:
<div id="hodiny">
<span class="hod">hh</span>:<span class="min">mm</span>:<span class="sec">ss</span>
</div>
Budeme také potÅebovat CSS k jejich obarvenÃ.
Funkce aktualizuj bude aktualizovat hodiny, aby ji funkce setInterval mohla každou sekundu volat:
function aktualizuj() {
let hodiny = document.getElementById('hodiny');
let datum = new Date(); // (*)
let hod = datum.getHours();
if (hod < 10) hod = '0' + hod;
hodiny.children[0].innerHTML = hod;
let minuty = datum.getMinutes();
if (minuty < 10) minuty = '0' + minuty;
hodiny.children[1].innerHTML = minuty;
let sekundy = datum.getSeconds();
if (sekundy < 10) sekundy = '0' + sekundy;
hodiny.children[2].innerHTML = sekundy;
}
Na Åádku (*) pokaždé zjistÃme aktuálnà datum, protože volánà setInterval nejsou spolehlivá: může k nim docházet s prodlevami.
Funkce pro správu hodin:
let idÄasovaÄe;
function spusťHodiny() { // spustà hodiny
if (!idÄasovaÄe) { // nový interval nastavÃme, jen pokud hodiny nebÄžÃ
idÄasovaÄe = setInterval(aktualizuj, 1000);
}
aktualizuj(); // (*)
}
function zastavHodiny() {
clearInterval(idÄasovaÄe);
idÄasovaÄe = null; // (**)
}
ProsÃme vÅ¡imnÄte si, že volánà aktualizuj() nenà jen nastaveno ve spusÅ¥Hodiny(), ale spustà se okamžitÄ na Åádku (*). Jinak by návÅ¡tÄvnÃk musel Äekat do prvnÃho spuÅ¡tÄnà setInterval a hodiny by do té doby byly prázdné.
Je také důležité nastavit nový interval ve funkci spusÅ¥Hodiny() jen tehdy, když hodiny nebÄžÃ. Jinak by nÄkolik kliknutà na spouÅ¡tÄcà tlaÄÃtko nastavilo vÃce soubÄžných intervalů. JeÅ¡tÄ horšà by bylo, že bychom si pamatovali jen idÄasovaÄe poslednÃho intervalu a ztratili odkazy na vÅ¡echny ostatnÃ. Pak bychom už nikdy nedokázali hodiny zastavit! VÅ¡imnÄte si, že když jsou na Åádku (**) hodiny zastaveny, musÃme idÄasovaÄe smazat, abychom mohli hodiny znovu spustit volánÃm spusÅ¥Hodiny().