Podobných postupem jako jsme na lekci tvořili aplikaci Zprávičky zkuste vytvořit vlastní aplikaci, která bude zobrazovat počasí na aktální týden.
- Forkem si vytvořte kopii tohoto repozitáře. Najdete v něm soubor s daty pro počasí na jeden týden.
- V naší aplikaci budeme chtít vytvořit dvě stránky podle popisu dále. Zatím je nemusíme nijak horlivě stylovat, stačí nám zatím základní zobrazení dat.
- Hlavní stránka bude
index.html
s přehledem počasí na sedm dní v týdnou, pondělí až pátek. Každý den bude zobrazen jako karta s názvem dne, teplotou a stavem typu zataženo, déšť, sníh, atd. Pro tuto stránku si vytvořte samostatný souborindex.js
a naplňte HTML obsahem podle dodaných dat. - Po rozkliknutí karty na hlavní stránce se uživatel dostane na stránku
detail.html
s detailním přehledem počasí na daný den. Odkaz bude vypadat napříkladdetail.html?den=pondeli
. Na stránce se zobrazí název dne, teploty ráno, odpoledne a večer, stav jako zataženo, déšť apod., vlhkost, tlak a slovní popis počasí.
U všech následujících úryvků kódů vytvořte technický popis jejich fungování a zároveň zkuste odhadnout záměr daného kódu. Obě dvě části si skutečně napište například do textového souboru.
-
const average = (a, b) => { return (a + b) / 2; };
-
const titleElement = document.querySelector('.title'); titleElement.textContent = 'Nadpis';
-
let time = 0; setTimeout(() => { time += 1; console.log('time', time); }, 1000);
-
buttonOk.addEventListener('click', () => { document.body.innerHTML = '<p>Everything OK</p>'; });
-
document.addEventListener('keyup', (event) => { if (event.code === 'KeyP') { console.log('paused'); } });
Řešení
const average = (a, b) => {
return (a + b) / 2;
};
- Vytvářím funkci, která očekává na vstupu dva parametry, které sipojmenovávám
a
ab
. Funkci si ukládám do proměnné pojmenovanéaverage
. - V těle funkce je jediný příkaz, který vypočítá součet parametrů
a
ab
, součet vydělí dvěma a výslednou hodnotu vrátí pomocíreturn
jako návratovou hodnotu funkce.
Funkce average
počítá průměrnou hodnotu dvou zadaných čísel.
const titleElement = document.querySelector('.title');
titleElement.textContent = 'Nadpis';
- Pomocí metody
querySelector()
vyhledám první element v dokumentu, který odpovídá zadanému CSS selektoru.title
. Selektor odpovídá všem prvkům s třídoutitle
. Nalezený prvek se uloží do proměnnétitleElement
. - Do textového obsahu (
textContent
) nalezeného prvku se vloží text „Nadpis“ – původní obsah se přepíše.
Kód nastaví text „Nadpis“ do prvního elekemntu se třídou title
v dokumentu. (Pokud by v dokumentu takový element nebyl, kód spadne s chybou.)
let time = 0;
setTimeout(() => {
time += 1;
console.log('time', time);
}, 1000);
- Vytvořím proměnnou
time
, do které se uloží číslo0
. Obsah proměnné bude možné později v kódu změnit. - Zavolám funkci
setTimeout()
, která zavolá mou funkci (callback) za jednu sekundu. - Předaná callback funkce je anonymní.
- Předaná callback funkce má v těle dva příkazy.
- První příkaz funkce zvýší hodnotu proměnné
time
o1
. - Druhý příkaz vypíše dvě hodnoty do konzole v DevTools prohlížeče. První hodnota je text „time“, druhá hodnota je aktuální hodnota proměnné
time
(tj.1
).
Kód jednu sekundu po načtení stránky vypíše do konzole time 1
.
buttonOk.addEventListener('click', () => {
document.body.innerHTML = '<p>Everything OK</p>';
});
- Kód předpokládá existenci proměnné
buttonOk
, která obsahuje DOM element (pravděpodobně potvrzovací tlačítko). - Na proměnné
buttonOk
se volá metoda addEventListener se dvěma parametry. MetodaaddEventListener
nastaví posluchače událostí na DOM elementubuttonOk
. - První parametr metody
addEventListener
je název události, které chceme poslouchat. Zde se nastavuje událostclick
, tedy kliknutí tlačítkem myši. - Druhý parametr je funkce (callback), která se zavolá v okamžiku, kdy došlo k dané události – v tomto případě kdy uživatel klikl na tlačítko
buttonOk
. - V tomto případě se předává anonymní funkce (callback).
- V těle funkce je jediný příkaz. Z proměnné
document
(ve které je DOM element reprezentující celý dokument zobrazený v prohlížeči) se přečte vlastnost (property)body
, která obsahuje DOM element odpovídající elementu<body>
v HTML, tedy viditelnou část webové stránky. - Do vlastnosti (property)
innerHTML
propertybody
se zapíše (přepíše) text „Everything OK
“. VlastnostinnerHTML
reprezentuje HTML kód příslušného DOM elementu (v tomto případě viditelného obsahu celé stránky). - Text „
Everything OK
“ představuje HTML kód – odstavec textu (element<p>
) s vloženým textem „Everything OK“.
Při kliknutí na tlačítko buttonOk
se přepíše obsah celé webové stránky, nahradí se jedním odstavcem, ve kterém bude text „Everything OK“.
document.addEventListener('keyup', (event) => {
if (event.code === 'KeyP') {
console.log('paused');
}
});
- Na proměnné
document
(reprezentující celý dokument zobrazený v prohlížeči) se zavolá metodaaddEventListener
, která nastavuje posluchač události. Metoda dostane dva parametry. - První parametr je text „keyup“, posluchač události tedy bude navěšen na události, když uživatel pustil dříve stisknutou klávesu.
- Druhý parametr je funkce (callback), která se zavolá, když k uvedené události dojde.
- Předávaná funkce je anonymní funkce, která očekává jeden parametr. Pojmenovává si ho
event
. - Tělo funkce tvoří jeden příkaz – podmínka (
if
), která testuje, zda vlastnost (property)code
události (parametrevent
) je rovna řetězci „KeyP“. Testuje se, zda událost nese informaci, že uživatel pustil klávesu s písmenem „P“. - Pokud je podmínka splněna, zavolá se metoda
log
na objektuconsole
s parametrem – textem „paused“.
Pokaždé, když uživatel kdekoli v dokumentu stiskne a pak pustí klávesu „P“, vypíše se do konzole v DevTools text „paused“