Analogové hodiny do každé rodiny
Každý člověk potřebuje vědět, kolik je hodin. Proč mu to tedy neukázat rovnou na internetové stránce? V dnešní době jsou sice standardem hodiny digitální, ale někdo dává přednost klasickým ručičkám. Bude na mně a JavaScriptu, aby to umožnil.
V dnešním postupu budeme používat cyklus for a oživíme si tak poznatky z matematiky střední školy. Na tento odkaz klikněte pro zobrazení ukázky dnešního skriptu.
Jak jistě víte, analogové hodinky mají ciferník a tři ručičky (hodinová, minutová a sekundová). Každou z těchto částí budeme vpisovat do DIV:
|
Umístění prvků a jejich velikost jsou samozřejmě zcela na vás. Pouze dejte pozor na to, aby velikost korespondovala s budoucím vykreslením hodin. Prvky div pro ručičky jsou v prvku cifernik, mají absolutní souřadnice a jsou na sobě (sekundová ručička bude v nejsvrchnější vrstvě).
Nyní začneme s tvorbou skriptu. V první řadě potřebujeme mít údaje o aktuálním čase, založíme si tedy několik globálních proměnných, které budeme používat v celém skriptu. Jejich hodnotu nastavíme pomocí funkce cas():
|
Aktuální čas zjistíme pomocí objektu Date(). Vytvoříme tedy objekt ted typu Date(). Pokud Date() nemá žádný parametr, bude mít ted hodnotu přesného data a času. Proměnné hodiny, minuty a sekundy nastavíme pomocí metod getHours(), getMinutes() a getSeconds(). Jejich názvy mluví jasně, ale pro pořádek – z objektu date vrací aktuální počet hodin, minut, či vteřin. Protože čas se stále mění, musíme také hodnoty proměnných měnit a nejlépe každou sekundu – funkci setTimeout() netřeba popisovat.
Přikročme k vykreslení ciferníku. Je kruhový, použijeme tedy parametrické vyjádření kružnice: x = m + r*cos(t) a y = n + r*sin(t), kde m a n jsou souřadnice středu a r je poloměr kružnice, t z intervalu <0; 2*3.141592) je proměnný parametr. Vykreslení proběhne v cyklu for. Čísel je na ciferníku 12 proto t budeme zvětšovat po 1/6 Ludolfova čísla. (Přiřadíme ho do proměnné PI):
|
Založíme také další globální proměnné – polomer (poloměr ciferníku), poziceX (horizontální pozice středu kružnice) a poziceY (vertikální pozice středu kružnice). Budeme je používat ve všech dalších funkcích.
Cyklus nám proběhne 12x. Vždy pomocí vlastnosti innerHTML vepíše do prvku cifernik nový tag div s absolutními souřadnicemi určenými rovnicí kružnice, v něm bude číslo určené proměnnou cif (ta začíná na čísle 3, protože první souřadnice jsou na 3. hodině; pokud cif přejde 12 nastaví se od 1). Ypsilonovou souřadnici nastaví vždy pro úhel určený proměnnou i (z cyklu for), x se nastaví dle proměnné cif. Protože dvouciferné číslo je širší než jednociferné, bude dvouciferné číslo posunuto o 4 body doleva. Funkce sinus a cosinus vypočteme pomocí metod Math.sin() a Math.cos().
Z ručiček bude nejsložitější ta sekundová – její pozice se musí každou sekundu měnit. Znázorníme ji pomocí několika znaků *, které vykreslíme také pomocí cyklu for:
|
Vykreslovat se budou od středu (polomer – i), budou od sebe vzdáleny 15 bodů a podle podmínky cyklu jich bude 7.
Požadované znaky leží vlastně na soustředných kružnicích, budeme je tedy vykreslovat jako body kružnice do dalších prvků div s absolutními souřadnicemi. Úhel v parametrických rovnicích kružnice je určen podle proměnné sekundy (funkce cas(), možných pozic je 60, stejně jako později u minutové ručičky). Je zmenšen o PI/2 protože vykreslování – jak už jsem jednou říkal – začíná u 3. hodiny ciferníku. Ypsilonová souřadnice je zvětšená o dva body, aby se znak * dostal na úroveň středu číslic ciferníku. Nové prvky umístíme do již existujícího elementu sec. Změnu zajistíme oblíbenou funkcí setTimeout(). (Na začátku se funkce sec opět vyprázdní).
Jako další vykreslíme hodinovou ručičku:
|
Postup je takřka stejný jako u sekundové, pouze znaků bude méně a budou to znaky uvozovek. Vepsány budou samozřejmě do prvku hod. Jejich pozice v ciferníku je závislá na počtu minut (při 30 minutách bude hodinovka mezi dvěma sousedními číslicemi ciferníku). Změnu polohy budeme volat ve funkci pro minutovou ručičku:
|
Vykreslení je opět analogické s hodinovkou a sekundovkou. Bude stejně dlouhá jako sekundová ručička, pouze je použit jiný znak a vepisuje se do prvku min (jak jinak). Pro změnu její pozice testujeme v sekundovém intervalu a s pomocí proměnné x změnu proměnné minuty. Pokud se proměnná změní, nastaví se nová pozice pro minutovou i hodinovou ručičku.
Nyní už stačí kdekoli ve stránce zavolat všechny vytvořené funkce a zobrazí se nám analogové hodiny:
|
Věřím, že se vám článek líbil.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024 -
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024 -
Responzivní design: Proč by ho neměl ignorovat žádný vývojář?
27. listopadu 2023
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024