⊗jsPmTrSB 449 of 505 menu

Ajastimen käynnistys- ja pysäytyspainikkeet JavaScriptillä

Tehdään nyt kaksi painiketta: ensimmäistä painaessa ajastin käynnistyy ja toista painaessa se pysähtyy. Tässä tilanteessa kaikki ei olekaan niin yksinkertaista ja meitä odottaa sudenkuoppa. Ymmärtääksemme tämän sudenkuopan olemuksen, kuvataan koodin luomista vaiheittain.

Joten, tehdään kaksi pientä painiketta:

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

Saadaan viittaukset näihin painikkeisiin muuttujiin:

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

Painaessa ensimmäistä painiketta käynnistetään ajastin, tallentaen sen numeron muuttujaan:

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

Ja nyt pysäytetään ajastin toista painiketta painaessa:

start.addEventListener('click', function() { let timerId = setInterval(function() { console.log('!') }, 1000); }); // Pysäytetään ajastin: stop.addEventListener('click', function() { clearInterval(timerId); });

Kuitenkin, jos yritämme suorittaa yllä olevaa koodia, meitä odottaa yllätys: yrittäessä pysäyttää ajastin huomaamme, että muuttuja timerId on yhtä kuin undefined! Miksi näin kävi? Koska ajastinta käynnistettessään teimme muuttujastamme timerId paikallisen start-painikkeen liitetyn funktion sisällä.

Ongelman ratkaisemiseksi teemme muuttujasta timerId globaalin - tällöin se on saatavilla sekä ajastimen käynnistys- että pysäytysfunktioissa:

let timerId; // tehdään muuttujasta globaali start.addEventListener('click', function() { timerId = setInterval(function() { console.log('!') }, 1000); }); stop.addEventListener('click', function() { clearInterval(timerId); });

Olkoon annettu muuttuja, jossa aluksi säilötään numero 100. Annettu on myös kaksi painiketta. Painaessa ensimmäistä painiketta käynnistetään ajastin, joka joka sekunti vähentää muuttujan arvoa 1:llä ja tulostaa uuden arvon konsoliin. Heti kun muuttujan arvo saavuttaa nollan - pysäytetään ajastin.

Painaessa toista painiketta pysäytetään ajastin. Pysäytä myös ajastin, jos toista painiketta ei painettu, mutta muuttujan arvo saavutti nollan.

Eräs ohjelmoija kirjoitti koodin, joka painaessa painiketta käynnistää ajastimen, joka tulostaa konsoliin nykyisen ajanhetken:

<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); });

Koodin käynnistyksen jälkeen kuitenkin kävi ilmi, että pysäytyspainike ei toimi. Korjaa koodin tekijän virhe.

Toinen ohjelmoija kirjoitti myös koodin edellisen tehtävän ratkaisemiseksi:

<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); });

Koodin käynnistyksen jälkeen kuitenkin kävi jälleen ilmi, että pysäytyspainike ei toimi. Korjaa koodin tekijän virhe.

Toinen ohjelmoija kirjoitti myös koodin edellisen tehtävän ratkaisemiseksi:

<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); });

Koodin käynnistyksen jälkeen kuitenkin kävi jälleen ilmi, että pysäytyspainike ei toimi. Korjaa koodin tekijän virhe.

Toinen ohjelmoija kirjoitti myös koodin edellisen tehtävän ratkaisemiseksi:

<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(); });

Koodin käynnistyksen jälkeen kuitenkin kävi jälleen ilmi, että pysäytyspainike ei toimi. Korjaa koodin tekijän virhe.

Teoreettisessa osassa esittämäni koodi ei ota huomioon sitä, että start-painikkeeseen voidaan tehdä useita painalluksia. Tämän ongelman korjaamiseksi voidaan start-painiketta painaessa irroittaa tapahtuma tästä painikkeesta, ja stop-painiketta painaessa liittää se takaisin. Korjaa ongelma.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää