-
โฑ๏ธ ์คํฑ์์น ์ ์ํ๊ธฐ | setInterval , String.padStartTIL 2022. 9. 5. 22:22
1. semantic html tag ์์ฑ
<body> <main> <h1>โฑ๏ธSTOPWATCH</h1> <section class="stopwatch_interface"> <span id="screen">00:00:00</span> <button id="btn"> <span>์์</span> </button> </section> </main> </body>
2. CSS ์์ฑ
*{ margin : 0; padding : 0; box-sizing: border-box; } main{ position : absolute; top : 50%; left : 50%; transform : translate(-50%, -50%); width : 551px; border : 1px solid #ccc; border-radius : 10px; } main h1{ font-size : 15px; color :#4285f4; font-weight : lighter; border-bottom : 1px solid #4285f4; padding : 10px; } main section.stopwatch_interface{ font-size : 55px; display : flex; padding : 30px 0; } main #screen{ flex-basis : 80%; text-align : center; } main #btn{ flex-basis : 20%; margin-right: 30px; border : 1px solid #ccc; border-radius : 10px; } main #btn.active{ background-color : #4285f4; color : white; }
3. JS ์์ฑ
1. button ํด๋ฆญ ์ active ํด๋์ค๋ฅผ ๋ถ์ฌ์ค๋ค.
button.classList.contains("active") ? button.classList.remove("active") : button.classList.add("active")
์์ ์ฝ๋๋ฅผ toggle ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์๋์ ๊ฐ์ด ์ธ ์ ์๋ค.
2. cs๋ฅผ 100/1์ด ๋ง๋ค 1์ฉ ์ฌ๋ ค์ค๋ค.
screen ํ๋ฉด์๋ m : s : cs ๊ฐ ๋์์ ธ์ผ ํ๋ค.
m = ๋ถ
s = ์ด
cs = ์ผํฐ์ธ์ปจ๋(100๋ถ์ 1์ด๋ฅผ ๊ฐ๋ฆฌํจ๋ค)
setInterval, clearInterval ์ฌ์ฉํ๊ธฐ
setInterval ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๊ฐ ์ํ๋ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๊ณ ํจ์๋ฅผ ์คํํ ์ ์๋ค. clearInterval ํจ์๋ ๋ฐ๋ณต๋์ด ์คํ๋๊ณ ์๋ setInterval ํจ์๋ฅผ ์ ๊ฑฐํ ๋ ์ฌ์ฉํ๋ค.
setInterval(ํจ์, ์๊ฐ ๊ฐ๊ฒฉ), output : ์๋ณ์ timerId
- 1000์ด 1์ด๋ฅผ ๋ปํ๋ค.
100/1์ด๋ง๋ค(10) cs๋ฅผ +1 ํด์ฃผ๋ฉด ๋๋ค.
setInterval์ ๊ณ ์ ํ timerId๋ฅผ returnํ๋ค. setInterval์ ๋ณ์์ ๋ฃ์ด๋๋ฉด ๋ณ์์๋ timerId๊ฐ ๋ค์ด๊ฐ๋ค. ๋์ค์ clearInteval์ ๋งค๊ฐ๋ณ์๋ก timerId(๋ณ์)๋ฅผ ๋๊ฒจ์ฃผ๋ฉด setInterval ํจ์๊ฐ ์ ๊ฑฐ๋๋ค.
3. padStart ์ฌ์ฉํ๊ธฐ
String.padStart(targetLength, [,padString])
-targetLength
๋ชฉํ ๋ฌธ์์ด ๊ธธ์ด
-padString(optional)
๋น ๋ฌธ์์ด์ ์ฑ์ธ ๋ฌธ์
output : ์์์ ๋ถํฐ ์ฃผ์ด์ง ๋ฌธ์์ด๋ก ์ฑ์ ๋ชฉํ ๊ธธ์ด๋ฅผ ๋ง์กฑํ๋ ๋ฌธ์์ด
m , s, cs ๋ฅผ ๋์๋ฆฌ ์ฑ์ธ ๋(00:00:00) ๋ง์ฝ m, s, cs ๊ฐ ํ์๋ฆฌ๋ผ๋ฉด padStart(2, "0") ์ ์ฌ์ฉํ์ฌ ๋์๋ฆฌ ๋ฌธ์์ด๋ก ์ฑ์ธ ์ ์๋ค. 2์๋ฆฌ๊ฐ ๋ ๋๊น์ง "0" ๋ฌธ์์ด์ ์์์๋ถํฐ ์ฑ์ ์๋ฆฟ์๋ฅผ ์ฑ์ด๋ค.
const button = document.getElementById("btn"); const screen = document.getElementById("screen"); let timer; button.addEventListener("click", () => { button.classList.toggle("active"); let m = 0; let s = 0; let cs = 0; if(button.classList.contains("active")){ button.innerText = "๋ฉ์ถค"; timer = setInterval(() => { cs++; if(cs >= 100){ cs = 0; s++; } if(s >= 60){ s = 0; m++; } if(m >= 60){ m = 0; } screen.innerText = `${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}:${String(cs).padStart(2, "0")}`; }, 10); } else { button.innerText = "์์"; clearInterval(timer); screen.innerText = "00:00:00"; } });
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐จ ubuntu | shell theme ๋ฐ๊พธ๊ธฐ (0) 2022.09.15 Git , Github | ๊น๊ณผ ๊นํ๋ธ ๋ง์คํฐ (0) 2022.09.14 ๐ ํ๋ฒ๊ฑฐ ๋ฒํผ ์ ์ํ๊ธฐ (0) 2022.09.03 ๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive | ์ด๋ฒคํธ [์ด๋ฒคํธ ํธ๋ค๋ฌ] (0) 2022.05.26 ๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive | #2 DOM [์์ ๋ ธ๋ ์ ํํ๊ธฐ] (0) 2022.05.25