⊗jsPmTrSB 449 of 505 menu

Przyciski uruchamiania i zatrzymywania timera w JavaScript

Stwórzmy teraz dwa przyciski: po naciśnięciu pierwszego niech timer się uruchamia, a po naciśnięciu drugiego - zatrzymuje. Tutaj sprawa nie będzie już taka prosta i czeka na nas pułapka. Aby zrozumieć istotę tej pułapki, opiszmy tworzenie kodu krok po kroku.

A więc, robimy dwa przyciski:

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

Pobieramy referencje do tych przycisków do zmiennych:

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

Po naciśnięciu pierwszego przycisku uruchamiamy timer, zapisując jego numer w zmiennej:

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

A teraz zatrzymajmy timer po naciśnięciu drugiego przycisku:

start.addEventListener('click', function() { let timerId = setInterval(function() { console.log('!') }, 1000); }); // Zatrzymujemy timer: stop.addEventListener('click', function() { clearInterval(timerId); });

Jednakże, jeśli spróbujemy uruchomić powyższy kod, czeka nas niespodzianka: przy próbie zatrzymania timera okaże się, że zmienna timerId jest równa undefined! Dlaczego tak się stało? Ponieważ przy uruchamianiu timera uczyniliśmy naszą zmienną timerId lokalną wewnątrz funkcji powiązanej z przyciskiem start.

Dla rozwiązania problemu uczynmy zmienną timerId globalną - w tym przypadku będzie ona dostępna zarówno w funkcji uruchamiania timera, jak i w funkcji jego zatrzymywania:

let timerId; // uczynmy zmienną globalną start.addEventListener('click', function() { timerId = setInterval(function() { console.log('!') }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Niech będzie dana zmienna, w której początkowo przechowywana jest liczba 100. Dane są także dwa przyciski. Po naciśnięciu pierwszego przycisku uruchom timer, który co sekundę będzie zmniejszał wartość zmiennej o 1 i wypisywał nową wartość w konsoli. Jak tylko wartość zmiennej osiągnie zero - zatrzymaj timer.

Po naciśnięciu drugiego przycisku zatrzymaj timer. Również zatrzymaj timer, jeśli drugi przycisk nie został naciśnięty, ale wartość zmiennej osiągnęła zero.

Pewien programista napisał kod, który po naciśnięciu przycisku uruchamia timer, wypisujący w konsoli aktualny moment czasu:

<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 uruchomieniu kodu, jednakże, okazało się, że przycisk zatrzymania nie działa. Popraw błąd autora kodu.

Kolejny programista także napisał kod dla rozwiązania poprzedniego zadania:

<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 uruchomieniu kodu, jednakże, znów okazało się, że przycisk zatrzymania nie działa. Popraw błąd autora kodu.

Kolejny programista także napisał kod dla rozwiązania poprzedniego zadania:

<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 uruchomieniu kodu, jednakże, znów okazało się, że przycisk zatrzymania nie działa. Popraw błąd autora kodu.

Kolejny programista także napisał kod dla rozwiązania poprzedniego zadania:

<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 uruchomieniu kodu, jednakże, znów okazało się, że przycisk zatrzymania nie działa. Popraw błąd autora kodu.

Przytoczony przeze mnie w części teoretycznej kod nie uwzględnia tego, że na przycisk start można wykonać kilka naciśnięć. Dla poprawienia tego problemu można po naciśnięciu przycisku start odwiązać zdarzenie od tego przycisku, a po naciśnięciu przycisku stop - powiązać z powrotem. Popraw problem.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć