⊗jsPmTrSB 449 of 505 menu

Tlačidlá na spustenie a zastavenie časovača v JavaScripte

Teraz vytvorme dve tlačidlá: kliknutím na prvé sa časovač spustí a kliknutím na druhé - zastaví. Tu to už nebude také jednoduché a čaká nás úskalie. Aby sme pochopili podstatu tohto úskalia, popíšem vytvorenie kódu krok za krokom.

Takže, vytvoríme dve tlačidlá:

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

Získame odkazy na tieto tlačidlá do premenných:

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

Kliknutím na prvé tlačidlo spustíme časovač, pričom jeho číslo zapíšeme do premennej:

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

A teraz zastavíme časovač kliknutím na druhé tlačidlo:

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

Avšak, ak sa pokúsime spustiť vyššie uvedený kód, čaká nás prekvapenie: pri pokuse o zastavenie časovača sa ukáže, že premenná timerId sa rovná undefined! Prečo sa to stalo? Pretože pri spustení časovača sme urobili našu premennú timerId lokálnou vo vnútri funkcie priradenej k tlačidlu start.

Na vyriešenie problému urobíme premennú timerId globálnou - v tomto prípade bude prístupná ako vo funkcii na spustenie časovača, tak aj vo funkcii na jeho zastavenie:

let timerId; // urobíme premennú globálnou start.addEventListener('click', function() { timerId = setInterval(function() { console.log('!') }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Nech je daná premenná, v ktorej sa pôvodne ukladá číslo 100. Sú dané aj dve tlačidlá. Kliknutím na prvé tlačidlo spustite časovač, ktorý každú sekundu zníži hodnotu premennej o 1 a vypíše novú hodnotu do konzoly. Akonáhle hodnota premennej dosiahne nulu - zastavte časovač.

Kliknutím na druhé tlačidlo zastavte časovač. Tiež zastavte časovač, ak druhé tlačidlo nebolo stlačené, ale hodnota premennej dosiahla nulu.

Nejaký programátor napísal kód, ktorý kliknutím na tlačidlo spúšťa časovač, ktorý vypisuje do konzoly aktuálny č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 spustení kódu sa však ukázalo, že tlačidlo zastavenia nefunguje. Opravte chybu autora kódu.

Ďalší programátor tiež napísal kód pre riešenie predchádzajúcej ú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 spustení kódu sa však opäť ukázalo, že tlačidlo zastavenia nefunguje. Opravte chybu autora kódu.

Ďalší programátor tiež napísal kód pre riešenie predchádzajúcej ú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 spustení kódu sa však opäť ukázalo, že tlačidlo zastavenia nefunguje. Opravte chybu autora kódu.

Ďalší programátor tiež napísal kód pre riešenie predchádzajúcej ú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 spustení kódu sa však opäť ukázalo, že tlačidlo zastavenia nefunguje. Opravte chybu autora kódu.

Kód, ktorý som uviedol v teoretickej časti, nezohľadňuje to, že na tlačidlo start je možné vykonať niekoľko kliknutí. Na opravu tohto problému je možné po kliknutí na tlačidlo start odpojiť udalosť od tohto tlačidla, a po kliknutí na tlačidlo stop - pripojiť späť. Opravte problém.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť