Milan Herda, 02/2020
Lekcia 5
Funkcie
Premenné a argumenty
Cykly
Podmienky
Divide and Conquer
Deklarácia (vytvorenie)
Pomenované
Anonymné
function dvojkrok() {
// ...
}
const dvojkrok = function () {
// ...
};
function () {
// ...
}
Funkcia sa len vytvorí, zatiaľ sa jej kód vôbec nevykonáva!
Anonymná uložená do premennej
Volanie (použitie)
Pomenované
Anonymné
dvojkrok()
dvojkrok()
(function () {
// ...
})()
V tejto chvíli sa začne vykonávať kód funkcie
Anonymná uložená do premennej alebo argumentu
Cvičenie: čo nakreslí tento kód?
const dvojkrok = function () {
krokDopredu();
krokDopredu();
};
let pocetKrokov = 0;
polozZnacku;
krokDopredu;
polozZnacku;
dvojKrok
otocDoprava;
dvojKrok
krokDopredu
polozZnacku;
A
B
function spocitaj(x, y) {
return x + y;
}
const vysledok = spocitaj(5, 6);
console.log(vysledok);
Príkaz return okamžite ukončuje vykonávanie tela funkcie
Ak sa za ním nachádza nejaká hodnota, tak táto sa vracia z funkcie von na miesto volania
Vytvorte funkciu, ktorá vráti druhú mocninu svojho argumentu
Tip: druhá mocnina znamená, že číslo vynásobite sebou samým
function druhaMocnina(cislo) {
// ...
}
const x = druhaMocnina(4);
console.log(x); // 16
function druhaMocnina(cislo) {
return cislo * cislo;
}
const x = druhaMocnina(4);
console.log(x); // 16
Vytvorte funkciu max, ktorá vráti ten väčší zo svojich dvoch argumentov
function max(x, y) {
// ...
}
const vacsie = max(4, 8);
console.log(vacsie); // 8
function max(x, y) {
if (x > y) {
return x;
}
return y;
}
const vacsie = max(4, 8);
console.log(vacsie); // 8
Vytvorte funkciu jeParne, ktorá zistí, či je daný argument párne číslo
function jeParne(cislo) {
// ...
}
const vysledok = jeParne(4);
console.log(vysledok); // true
console.log(jeParne(7)); // false
function jeParne(cislo) {
if (cislo % 2 === 0) {
return true;
}
return false;
}
const vysledok = jeParne(4);
console.log(vysledok); // true
console.log(jeParne(7)); // false
Vytvorte nový súbor js/math.js a uložte do neho všetky tri nové funkcie
Vytvorte novú HTML stránku (kalkulacka.html) a umiestnite ju hneď vedľa index.html
<!doctype html>
<html lang="sk">
<head>
<meta charset="utf-8">
<title>Kalkulačka</title>
</head>
<body>
<h1>Kalkulačka</h1>
</body>
</html>
<nav>
<ul>
<li><a href="index.html">Karel</a></li>
<li><a href="kalkulacka.html">Kalkulačka</a></li>
</ul>
</nav>
<!doctype html>
<html lang="sk">
<head>
<meta charset="utf-8">
<title>Kalkulačka</title>
</head>
<body>
<nav>
<ul>
<li><a href="index.html">Karel</a></li>
<li><a href="kalkulacka.html">Kalkulačka</a></li>
</ul>
</nav>
<h1>Kalkulačka</h1>
</body>
</html>
<h2>Druhá mocnina</h2>
<form id="form-power">
<label>Zadaj číslo:</label>
<input name="number">
<button type="submit">Vypočítaj</button>
</form>
<h3>Výsledok:</h3>
<div id="result-power"></div>
<h2>Zisti väčšie</h2>
<form id="form-max">
<label>Zadaj prvé číslo:</label>
<input name="first_number">
<label>Zadaj druhé číslo:</label>
<input name="second_number">
<button type="submit">Vypočítaj</button>
</form>
<h3>Výsledok:</h3>
<div id="result-max"></div>
<script src="js/math.js"></script>
<script>
const formPower = document.querySelector('#form-power');
formPower.addEventListener('submit', function (event) {
//event.preventDefault();
});
</script>
// v HTML vyhľadáme formulár a požiadame o jeho JS reprezentáciu
const formPower = document.querySelector('#form-power');
// chceme reagovať na to, keď sa klikne na formulárové tlačidlo
formPower.addEventListener('submit', function (event) {
// ale nechceme formulár odoslať na server
event.preventDefault();
// tu si môžeme doplniť to, čo chceme robiť
// My budeme počítať druhú mocninu
});
const formPower = document.querySelector('#form-power');
formPower.addEventListener('submit', function (event) {
event.preventDefault();
const cislo = formPower.number.value;
console.log(cislo);
});
const formPower = document.querySelector('#form-power');
formPower.addEventListener('submit', function (event) {
event.preventDefault();
const cislo = formPower.number.value;
const vysledok = druhaMocnina(cislo);
console.log(vysledok);
});
const formPower = document.querySelector('#form-power');
formPower.addEventListener('submit', function (event) {
event.preventDefault();
const cislo = formPower.number.value;
const vysledok = druhaMocnina(cislo);
console.log(vysledok);
document.querySelector('#result-power').innerHTML = vysledok;
});
Upravte text v #result-power na "Druhá mocnina čísla X je Y", kde X bude zadané číslo a Y vypočítaný výsledok.
const str = 'Druhá mocnina čísla ' + cislo + ' je ' + vysledok;
document.querySelector('#result-power').innerHTML = str;
Upravte text v #result-power na "Druhá mocnina čísla X je Y", kde X bude zadané číslo a Y vypočítaný výsledok.
const str = `Druhá mocnina čísla ${cislo} je ${vysledok}`;
document.querySelector('#result-power').innerHTML = str;
Inšpirujte sa prvým formulárom a sfunkčnite aj ten druhý
const formMax = document.querySelector('#form-max');
formMax.addEventListener('submit', function (event) {
event.preventDefault();
const prveCislo = formMax.firstNumber.value;
const druheCislo = formMax.secondNumber.value;
const vysledok = max(prveCislo, druheCislo);
document.querySelector('#result-max').innerHTML = vysledok;
});
Inšpirujte sa prvým formulárom a sfunkčnite aj ten druhý
const formMax = document.querySelector('#form-max');
formMax.addEventListener('submit', function (event) {
event.preventDefault();
const prveCislo = parseInt(formMax.firstNumber.value);
const druheCislo = parseInt(formMax.secondNumber.value);
const vysledok = max(prveCislo, druheCislo);
document.querySelector('#result-max').innerHTML = vysledok;
});
V js/sandbox.js urobte funkciu pocetZnaciek, kde:
function pocetZnaciek() {
let najdenychZnaciek = 0;
let prejdenych = 0;
while (!jePredTebouStena()) {
if (stojisNaZnacke()) {
najdenychZnaciek = najdenychZnaciek + 1;
}
krokDopredu();
prejdenych = prejdenych + 1;
}
celomVzad();
prejdiNPolicok(prejdenych);
celomVzad();
return znaciek;
}
function celomVzad() {
otocDolava();
otocDolava();
}
function prejdiNPolicok(trebaPrejst) {
while (trebaPrejst > 0 && !jePredTebouStena()) {
krokDopredu();
trebaPrejst = trebaPrejst - 1;
}
}
Pridajte na stránku index.html formulár:
<form id="formKarel">
<label>Nakresli čiaru dlhú:</label>
<input name="steps">
<button type="submit">Nakresli</button>
</form>
<script>
const formKarel = document.querySelector('#formKarel');
formKarel.addEventListener('submit', function (event) {
event.preventDefault();
const dlzka = parseInt(formKarel.steps.value);
ciaraDlzkyN(dlzka);
});
</script>
Dizajn stránky sa rieši pomocou CSS
Rôzne webstránky majú podobné prvky
Je zbytočné na každej webstránke vymýšľať vlastné CSS pre úplne všetko
Bežne sa používajú tzv. CSS frameworky
Sada CSS pravidiel riešiacich bežné veci
Stiahnete si a môžete používať
Otvoríme konzolu v adresári, kde je aj index.html
npm install bulma
cp node_modules/bulma/css/bulma.css static/css/
Otvoríme konzolu v adresári, kde je aj index.html
<link
href="./static/css/bulma.css"
rel="stylesheet"
>
Tesne pred </head>
<nav class="navbar is-dark" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<strong class="navbar-item">JS školenie</strong>
</div>
<div class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item is-active" href="index.html">
Karel
</a>
<a class="navbar-item" href="calc.html">
Kalkulačka
</a>
</div>
</div>
</nav>
Pozrite na https://bulma.io/documentation/form/general/
<form id="formKarel">
<div class="field">
<label class="label">Nakresli čiaru dlhú:</label>
<div class="control">
<input name="steps" class="input">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button type="submit" class="button is-primary">Nakresli</button>
</div>
</div>
</form>