⊗jsPmTrSB 449 of 505 menu

Tlačítka pro spuštění a zastavení časovače v JavaScriptu

Nyní vytvořme dvě tlačítka: kliknutím na první nechť se časovač spustí a kliknutím na druhé - zastaví. Zde to již nebude tak jednoduché a čeká nás háček. Abyste pochopili podstatu tohoto háčku, popsal jsem vytváření kódu krok za krokem.

Takže, uděláme dvě tlačítka:

<button id="start">start</button> <button id="stop">stop</button>

Získáme odkazy na tato tlačítka do proměnných:

let start = document.querySelector('#start'); let stop = document.querySelector('#stop');

Kliknutím na první tlačítko spustíme časovač, jehož číslo zapíšeme do proměnné:

start.addEventListener('click', function() { let timerId = setInterval(function() { console.log('!') }, 1000); });

A nyní zastavme časovač kliknutím na druhé tlačítko:

start.addEventListener('click', function() { let timerId = setInterval(function() { console.log('!') }, 1000); }); // Zastavíme časovač: stop.addEventListener('click', function() { clearInterval(timerId); });

Pokusíte-li se však spustit výše uvedený kód, čeká vás překvapení: při pokusu zastavit časovač se ukáže, že proměnná timerId je rovna undefined! Proč k tomu došlo? Protože při spuštění časovače jsme naši proměnnou timerId učinili lokální uvnitř funkce připojené k tlačítku start.

K vyřešení problému udělejme proměnnou timerId globální - v tomto případě bude přístupná jak ve funkci pro spuštění časovače, tak ve funkci pro zastavení:

let timerId; // učiníme proměnnou globální start.addEventListener('click', function() { timerId = setInterval(function() { console.log('!') }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Nechť je dána proměnná, ve které je inicialně uloženo číslo 100. Jsou dána také dvě tlačítka. Kliknutím na první tlačítko spusťte časovač, který bude každou sekundu snižovat hodnotu proměnné o 1 a vypisovat novou hodnotu do konzole. Jakmile hodnota proměnné dosáhne nuly - zastavte časovač.

Kliknutím na druhé tlačítko zastavte časovač. Zastavte také časovač, pokud druhé tlačítko nebylo stisknuto, ale hodnota proměnné dosáhla nuly.

Nějaký programátor napsal kód, který po kliknutí na tlačítko spouští časovač vypisující do konzole aktuální čas:

<input type="submit" id="start" value="start"> <input type="submit" id="stop" value="stop"> let start = document.querySelector('#start'); let stop = document.querySelector('#stop'); start.addEventListener('click', function() { let timerId = setInterval(function() { let date = new Date; console.log(date.getMinutes() + ' ' + date.getSeconds()); }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Po spuštění kódu se však ukázalo, že tlačítko zastavení nefunguje. Opravte chybu autora kódu.

Jiný programátor také napsal kód pro řešení předchozí úlohy:

<input type="submit" id="start" value="start"> <input type="submit" id="stop" value="stop"> let start = document.querySelector('#start'); let stop = document.querySelector('#stop'); let timerId; start.addEventListener('click', function() { let timerId = setInterval(function() { let date = new Date; console.log(date.getMinutes() + ' ' + date.getSeconds()); }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Po spuštění kódu se však opět ukázalo, že tlačítko zastavení nefunguje. Opravte chybu autora kódu.

Jiný programátor také napsal kód pro řešení předchozí úlohy:

<input type="submit" id="start" value="start"> <input type="submit" id="stop" value="stop"> let start = document.querySelector('start'); let stop = document.querySelector('stop'); let timerId; start.addEventListener('click', function() { setInterval(function() { let date = new Date; console.log(date.getMinutes() + ' ' + date.getSeconds()); }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Po spuštění kódu se však opět ukázalo, že tlačítko zastavení nefunguje. Opravte chybu autora kódu.

Jiný programátor také napsal kód pro řešení předchozí úlohy:

<input type="submit" id="start" value="start"> <input type="submit" id="stop" value="stop"> let start = document.querySelector('start'); let stop = document.querySelector('stop'); let timerId; start.addEventListener('click', function() { let timerId = setInterval(function() { let date = new Date; console.log(date.getMinutes() + ' ' + date.getSeconds()); }, 1000); }); stop.addEventListener('click', function() { clearInterval(); });

Po spuštění kódu se však opět ukázalo, že tlačítko zastavení nefunguje. Opravte chybu autora kódu.

Kód, který jsem uvedl v teoretické části, nebere v úvahu, že na tlačítko start lze provést několik kliknutí. K nápravě tohoto problému lze po kliknutí na tlačítko start odebrat událost z tohoto tlačítka, a po kliknutí na tlačítko stop - ji znovu připojit. Opravte problém.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout