-
[JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - 2javascript 2019. 4. 24. 15:18
์์(!) ๋์์์ต๋๋ค. ์ด์ ์ ํ๋ CSS, HTML ์์ค๋ ์ฌ๊ธฐ์(https://bejerry.tistory.com/15) ํ์ธ ํ์ค ์ ์์ต๋๋ค. ์ด์ ์์ค๊ฐ ์์ด์ผ ์ํ ํ ๋ฐ๋ผํ์ค ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
(๋๊ฐ? ๋์ฒด ๋๊ฐ ์ด๊ฑธ ๋ฐ๋ผํด?)์ง๋ ์๊ฐ
๋ค, ์ด์ ๊ธ์๋ ์๊ฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ํ๋ด๊ธด ํ์ต๋๋ค๋ง ์ค์๊ฐ์ผ๋ก ์ด๊ฐ ์ฌ๋ผ๊ฐ๊ณ , ๋ถ์ด ์ฌ๋ผ๊ฐ์ง ์๊ณ ๋ฉ์ถฐ์์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ์ํ๊ฑด ๋์งํธ ์๊ณ์ฒ๋ผ ์๊ฐ์ด ๊ฐ๋๊ฑธ ๋ธ๋ผ์ฐ์ ์ ๋ํ๋ด์ผ ํฉ๋๋ค.
์ด ๋ ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ setInterval( ) ๋ฉ์๋์ ๋๋ค.
setInterval( )
mdn(https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval)์์ ์๋ดํด์ฃผ๋ ๊ฒ์ scope.setInerval(func, delay) ์ ๋๋ค. ๊ฐ๋จํ ์์ ๋ฅผ ์๋์ ์ฝ๋๋ธ๋ญ์ผ๋ก ๋ณด์ฌ๋๋ฆด๊ฒ์.
//setInterval(ํจ์์๋ฆฌ, ๋ฐ๋ฆฌ์ธ์ปจ์ด๋จ์) function hey(){ setInterval(function(){ alert('Did you call me?'); },1000) } hey();
hey( )ํจ์๋ฅผ ํธ์ถํ์ต๋๋ค. ํจ์์๋ฆฌ์ ๋ฐ๋ก ํจ์๋ฅผ ์์ฑํ์ ๋ ๋ฉ๋๋ค. ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ์ฝ๋์ง๋ง ์กฐ๊ธ ๋ค๋ฅธ ๋ฌธ๋ฒ์ ๋ณด์ฌ๋๋ฆด๊น ํฉ๋๋ค.
ํจ์์๋ฆฌ(func)๋ฅผ ES6 ๋ฌธ๋ฒ์ผ๋ก ๋์ฒดํ๋ค๋ฉด ์ด๋ป๊ฒ ์ธ๊น์? ๊ทธ๋ฆฌ๊ณ 1์ด ํน์ 2์ด๋ง๋ค ๊ณ์ alert ์ฐฝ์ด ๋จ๋๊ฑธ ๋ณด๊ณ ๋ง ์์ ์ ์์ฃ . ๊ทธ๋ ๋ค๊ณ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ป๋ค ํค๋ ๋ฒ๊ฑฐ๋ก์๋ ์๊ณ ์.
๊ทธ๋์ ๋ฐ๋ณต๋๋ ๊ฒ์ ์ข ๋ฃ์ํฌ ์ข ๋ฃํจ์๋ ์ถ๊ฐํด์ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
function hey(){ //ES6 interval = setInterval(() => { alert('Did you call me?'); },2000) // 1์ด์์ 2์ด๋ก ์๊ฐ ๋๋ฆผ, ์ข ๋ฃํจ์ ๋ถ๋ฅผ ์๊ฐ ๋ฒ๊ธฐ. } //clearInterval( ) : ์ธ์์๋ setInterval ID๊ฐ ๋ค์ด๊ฐ๋ฉฐ(MDN์ฐธ๊ณ ), setInterval( )์ ์ข ๋ฃํ๋ค. function yes(){ clearInterval(interval); } hey();
์๋๋ ์ฝ๋๋ฅผ ์คํํ ํ๋ฉด ์บก์ณ์ ๋๋ค. hey( )๋ฅผ ๋ถ๋ ๊ณ (ํธ์ถ), Did you call me?(๋ ๋ถ๋ ์ด?)๋ผ๊ณ alert์ฐฝ์ด ๋จ๋ค์.
์ฐ๋ฆฌ๋ yes( )์ ์ธ์ณ์ผ(ํธ์ถ) ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด alert์ด ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญํ๊ฑฐ์์... ๋น ๋ฅด๊ฒ ๋ต๋ณํ๊ณ ๋ฌดํ alert์์ ํด๋ฐฉ๋ฉ์๋ค!
์ด๋ ์ ๊ฐ์? ES6 ๋ง๋ณด๊ธฐ์์ต๋๋ค. function์ด๋ผ๊ณ ์ ์ด์ผ ํ ๊ณณ์ ํ๋ผ๋ฏธํฐ ๊ดํธ๋ง ๋จ๊ฒจ๋๊ณ function์ ์ ์ง ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Arrow function์ ์ฌ์ฉํ์ต๋๋ค.
์ฌ๊ธฐ์ ES6 ๋ฌธ๋ฒ์ ๋ค ์ค๋ช ๋๋ฆฌ์ง ์๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์นดํ ๊ณ ๋ฆฌ๋ ์กด์ฌํ๋ฉฐ ์ถํ ์์์ผ๋ก ๊ธ๋ณด๋ค ํธํ๊ฒ ์ ํ์๊ฒ๋ ์ค๋นํ ๊ณํ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค :)
๊ทธ๋ผ ๋ณธ๋ก ์ผ๋ก ๋์์์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ์๊ณ๋ฅผ setInterval( )์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ์ฃ ? ํจ์์๋ฆฌ์ ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ๋ง๋ getTime์ ๋ฃ๊ณ 1์ด ๊ฐ๊ฒฉ์ผ๋ก ์ด๊ฐ ๋ฐ๋๋๊น delay๋ 1000 milliseconds๋ฅผ ์ฃผ๊ฒ ์ต๋๋ค.
JS-2
const alarmContainer = document.querySelector('.js-alarm'); const currentTime = alarmContainer.querySelector('h1'); function getTime(){ const date = new Date(); const hours = date.getHours(); const minutes = date.getMinutes(); const seconds = date.getSeconds(); currentTime.innerText = `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`; } function init(){ getTime(); setInterval(getTime, 1000); } init();
์ด? getTime( )์ ์ ๋ ๋ฒ ๋ถ๋ฅด๋์?
setInterval( )๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ 00:00:00์ ๋จผ์ ์ถ๋ ฅํ๊ณ 1์ด ํ์ getTime( )์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๊ทธ 1์ด ๋์ ๋ธ๋ผ์ฐ์ ์๋ ์ฐ๋ฆฌ๊ฐ HTML์์ ์ ์๋ <h1>00:00:00</h1> ํ๊ทธ๊ฐ ์ถ๋ ฅ๋๊ณ ๊ทธ ๋ค์ ์๊ณ๊ฐ ๋์ต๋๋ค.
์ ๋ ๋ณด๊ณ ์ถ์ง ์์์, ๋ก๋ก์๋ก๋ก๋ถ๋ก๋ก์ด. ๋ฐ๋ก ์๊ฐ์ ํธ์ถํ๊ณ 1์ด ํ์ ๋ค์ ์๊ฐ์ ํธ์ถํด์ ๊ธฐ์กด์ ์ถ๋ ฅ๋ ์๊ฐ์ ๋ฎ์ด๋ฒ๋ฆฌ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ clearInterval( )์ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ์๊ณ๊ฐ ๋ฉ์ถ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ด์ฃ !
๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจํ๊ณ ํ์ธํด๋ณด์ธ์!
์์งค๋ก ๋ง๋ค๊ฑฐ๋ ํ๋ฉด์ ๋ นํํ์ด์ผ ํ๋๋ฐ ํฌ์คํ ์ ํ๋ ๋น์ฅ์ ์ฌ๊ฑด์ ๊ทธ๋ด ์ ์์์ผ๋ฏ๋ก ์ํด ๋ถํ๋๋ฆฝ๋๋ค.
์ผ๋จ ์๊ฐ์ ์ค์๊ฐ์ผ๋ก ์์ง์ด๊ฒ ํ์ต๋๋ค. ์ด ๋ฟ๋ฏํจ์ด ์ฐธ ์ข๋ค์!
3ํญ์ฐ์ฐ์๋ก 10๋ณด๋ค ์์ ๊ฒฝ์ฐ ์์ 0์ ๋ถ์ด๊ธฐ๋ก ํ ๊ฑฐ ๊ธฐ์ต๋์๋์? ๊ทธ๊ฒ๋ ์ค๋ฅ์์ด ์ ๋์ค๋๊ฑธ ํ์ธํ ์ ์๋ ์์์ด์์ต๋๋ค.
์น ์ฑ ๋ง๋ค๊ธฐ 2ํธ์ ์ฌ๊ธฐ์ ๋ง์น๊ณ ๋ฐ๋ก 3ํธ ์ค๋นํ๊ฒ ์ต๋๋ค. ๋ฉ์๋ ์ค๋ช ์ ๊ธฐ์ค์ผ๋ก ์ผ๋ค๋ณด๋ ์ ํธ๋ณด๋ค ์์ด ์งง์์ก์ต๋๋ค. ์ฌ๋ ํ ์์ด ๋ฐ๋ก 3ํธ ์ค๋นํ๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ