Mygtukai laikmačio paleidimui ir sustabdymui JavaScript
Dabar sukurkime du mygtukus: paspaudus pirmąjį, laikmatis turėtų pasileisti, o paspaudus antrajį - sustoti. Čia jau viskas bus ne taip paprasta ir mūsų lauja spąstai. Kad suprastume šių spąstų esmę, aprašysime kodo kūrimą žingsnis po žingsnio.
Taigi, darome du mygtukus:
<button id="start">pradėti</button>
<button id="stop">sustabdyti</button>
Gauname nuorodas į šiuos mygtukus į kintamuosius:
let start = document.querySelector('#start');
let stop = document.querySelector('#stop');
Paspaudus pirmąjį mygtuką, paleidžiame laikmatį, įrašant jo numerį į kintamąjį:
start.addEventListener('click', function() {
let timerId = setInterval(function() {
console.log('!')
}, 1000);
});
O dabar sustabdome laikmatį paspaudus antrajį mygtuką:
start.addEventListener('click', function() {
let timerId = setInterval(function() {
console.log('!')
}, 1000);
});
// Sustabdome laikmatį:
stop.addEventListener('click', function() {
clearInterval(timerId);
});
Tačiau, jei bandysite paleisti aukščiau pateiktą
kodą, mūsų laukia staigmena: bandant sustabdyti
laikmatį paaiškės, kad kintamasis timerId
yra lygus undefined! Kodėl taip atsitiko?
Nes paleisdami laikmatį mes padarėme savo
kintamąjį timerId lokaliu funkcijos viduje,
pririšto prie mygtuko start.
Problemai spręsti padarykime kintamąjį timerId
globaliu - tokiu atveju jis bus prieinamas
tiek laikmačio paleidimo funkcijoje, tiek sustabdymo
funkcijoje:
let timerId; // padarykime kintamąjį globalų
start.addEventListener('click', function() {
timerId = setInterval(function() {
console.log('!')
}, 1000);
});
stop.addEventListener('click', function() {
clearInterval(timerId);
});
Tegu duotas kintamasis, kuriame iš pradžių
saugomas skaičius 100. Duoti ir du
mygtukai. Paspaudus pirmąjį mygtuką, paleiskite
laikmatį, kuris kas sekundę mažins
kintamojo reikšmę 1 ir išves
naują reikšmę į konsolę. Kai tik kintamojo
reikšmė pasieks nulį - sustabdykite laikmatį.
Paspaudus antrajį mygtuką sustabdykite laikmatį. Taip pat sustabdykite laikmatį, jei antrasis mygtukas nebuvo paspaustas, bet kintamojo reikšmė pasiekė nulį.
Kažkoks programuotojas parašė kodą, kuris paspaudus mygtuką paleidžia laikmatį, išvedantį į konsolę esamą laiko momentą:
<input type="submit" id="start" value="pradėti">
<input type="submit" id="stop" value="sustabdyti">
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);
});
Paleidus kodą, vis dėlto, paaiškėjo, kad sustabdymo mygtukas neveikia. Ištaisykite autoriaus kodo klaidą.
Kitas programuotojas taip pat parašė kodą ankstesnei užduočiai išspręsti:
<input type="submit" id="start" value="pradėti">
<input type="submit" id="stop" value="sustabdyti">
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);
});
Paleidus kodą, vis dėlto, vėl paaiškėjo, kad sustabdymo mygtukas neveikia. Ištaisykite autoriaus kodo klaidą.
Kitas programuotojas taip pat parašė kodą ankstesnei užduočiai išspręsti:
<input type="submit" id="start" value="pradėti">
<input type="submit" id="stop" value="sustabdyti">
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);
});
Paleidus kodą, vis dėlto, vėl paaiškėjo, kad sustabdymo mygtukas neveikia. Ištaisykite autoriaus kodo klaidą.
Kitas programuotojas taip pat parašė kodą ankstesnei užduočiai išspręsti:
<input type="submit" id="start" value="pradėti">
<input type="submit" id="stop" value="sustabdyti">
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();
});
Paleidus kodą, vis dėlto, vėl paaiškėjo, kad sustabdymo mygtukas neveikia. Ištaisykite autoriaus kodo klaidą.
Mano teoriškai pateiktas kodas neatsižvelgia į tai, kad ant start mygtuko galima paspauskti kelis kartus. Šiai problemai išspręsti galima paspaudus start mygtuką atjungti įvykį nuo šio mygtuko, o paspaudus stop mygtuką - prijungti atgal. Ištaisykite problemą.