Start és stop gombok JavaScript időzítőhöz

Most készítsünk két gombot: az elsőre kattintva induljon el az időzítő, a másodikra kattintva pedig álljon meg. Itt már nem lesz minden olyan egyszerű, és lesz egy meglepetés. Annak érdekében, hogy megértsük ennek a meglepetésnek a lényegét, lépésről lépésre írom le a kód létrehozását.

Tehát készítünk két gombot:

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

Ezekre a gombokra hivatkozást kapunk változókba:

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

Az első gombra kattintva indítsuk el az időzítőt, annak számát egy változóba mentve:

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

És most állítsuk le az időzítőt a második gomb megnyomásakor:

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

// Az időzítő leállítása:
stop.addEventListener('click', function() {
  clearInterval(timerId);
});

Azonban, ha a fenti kódot megpróbáljuk futtatni, meglepetés éri majd: az időzítő megállításának próbálatakor kiderül, hogy a timerId változó undefined! Miért történt ez? Mert az időzítő indításakor a timerId változónkat lokálissá tettük a start gombhoz kötött függvényen belül.

A probléma megoldásához tegyük a timerId változót globálissá - ebben az esetben elérhető lesz mind az időzítő indításának, mind a megállításának a függvényében:

javascriptlet timerId; // tegyük a változót globálissá

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

stop.addEventListener('click', function() {
  clearInterval(timerId);
});
Задание 1

Legyen adott egy változó, amelyben kezdetben a 100 szám található. Adott továbbá két gomb. Az első gomb megnyomására indítson el egy időzítőt, amely másodpercenként csökkenti a változó értékét 1-gyel, és az új értéket kiírja a konzolra. Amint a változó értéke eléri a nullát - állítsa le az időzítőt.

A második gomb megnyomására állítsa le az időzítőt. Állítsa le az időzítőt akkor is, ha a második gomb nincs megnyomva, de a változó értéke elérte a nullát.

Задание 2

Egy programozó írt kódot, amely a gomb megnyomására elindít egy időzítőt, amely kiírja a konzolra az aktuális időt:

html<input type="submit" id="start" value="start">
<input type="submit" id="stop"  value="stop">
javascriptlet 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);
});

A kód indítása után azonban kiderült, hogy a stop gomb nem működik. Javítsa ki a kód szerzőjének hibáját.

Задание 3

Egy másik programozó szintén kódot írt az előző feladat megoldására:

html<input type="submit" id="start" value="start">
<input type="submit" id="stop"  value="stop">
javascriptlet 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);
});

A kód indítása után azonban ismét kiderült, hogy a stop gomb nem működik. Javítsa ki a kód szerzőjének hibáját.

Задание 4

Egy másik programozó szintén kódot írt az előző feladat megoldására:

html<input type="submit" id="start" value="start">
<input type="submit" id="stop"  value="stop">
javascriptlet 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);
});

A kód indítása után azonban ismét kiderült, hogy a stop gomb nem működik. Javítsa ki a kód szerzőjének hibáját.

Задание 5

Egy másik programozó szintén kódot írt az előző feladat megoldására:

html<input type="submit" id="start" value="start">
<input type="submit" id="stop"  value="stop">
javascriptlet 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();
});

A kód indítása után azonban ismét kiderült, hogy a stop gomb nem működik. Javítsa ki a kód szerzőjének hibáját.

Задание 6

Az elméleti részben bemutatott kódom nem veszi figyelembe, hogy a start gombra többször is kattinthatunk. A probléma helyesbítése érdekében a start gomb megnyomásakor leválaszthatjuk az eseményt erről a gombról, a stop gomb megnyomásakor pedig visszaköthetjük. Javítsa ki a problémát.