ν‹°μŠ€ν† λ¦¬ λ·°

JS

stopwatch

choi95 2021. 7. 5. 15:34

0

Question

μœ„μ™€ 같이 μž‘λ™ν•˜λŠ” μŠ€ν†±μ›ŒμΉ˜λ₯Ό κ΅¬ν˜„ν•˜μ‹œμ˜€

 

μ£Όμš” Solution_stopwatch μ‹œκ°„ κ΅¬ν˜„

미리초_msλ§ˆλ‹€(0~99λ―Έλ¦¬μ΄ˆλŠ” 100λΆ„μ˜ 1초 => 100) setInterval() ν•¨μˆ˜ λ‚΄μ—μ„œ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€.

ν•΄λ‹Ή 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ currentTime(ν˜„μž¬ μ‹œκ°„) 값을 κ°€μ Έμ˜€κ³  κ°€μ Έμ˜¨ currentTime κ°’μ—μ„œ startTime(ν˜„μž¬ μ‹œκ°„)을

감산해주면 μŠ€ν†±μ›ŒμΉ˜μ˜ Start λ²„νŠΌμ„ λˆ„λ₯΄κ³ (μ‹œμž‘ μ‹œκ°„) κ·Έ λ’€λ‘œλΆ€ν„° ms λ‹Ή μ–Όλ§ˆλ‚˜ μ‹œκ°„μ΄ ν˜λ €λŠ”μ§€ μ•Œ 수 μžˆλ‹€.

 

μŠ€ν†±μ›ŒμΉ˜μ— ν‘œμ‹œλ˜λŠ” μ‹œκ°„(ms λ‹Ή) = currentTime - startTime

 

ν•˜μ§€λ§Œ ν˜„μž¬ μŠ€ν†±μ›ŒμΉ˜ ν‘œμ‹œλ˜λŠ” λͺ¨λ“  μ‹œκ°„μ„ λ‹€μŒ 연산을 μ‚¬μš©ν•˜μ—¬ κ΅¬ν•˜κ²Œ 되면 λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

초기 Start λ²„νŠΌμ„ ν΄λ¦­ν•˜μ˜€μ„ λ•ŒλŠ” λ¬Έμ œκ°€ μ—†μ§€λ§Œ Stop λ²„νŠΌμ„ λˆŒλŸ¬μ„œ μŠ€ν†±μ›ŒμΉ˜ μ‹œκ°„μ„ λ©ˆμ·„λ‹€κ°€ λ‹€μ‹œ Start λ²„νŠΌμ„ ν΄λ¦­ν•˜μ˜€μ„ κ²½μš°μ—λŠ”

λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 곡백 μ‹œκ°„μ΄ λ°œμƒν•˜μ—¬ μ œλŒ€λ‘œ 된 μ‹œκ°„μ΄ ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ 생긴닀.

 

예λ₯Ό λ“€μ–΄ 12μ΄ˆμ— μ‹œκ°„μ„ λ©ˆμ·„λ‹€κ°€ λ‹€μ‹œ μ‹œμž‘ν•œλ‹€κ³  ν•œλ‹€λ©΄ μ •ν™•ν•œ μ‹œκ°„μ€ 12μ΄ˆλΆ€ν„° λ‹€μ‹œ μŠ€ν†±μ›ŒμΉ˜κ°€ λŒμ•„κ°€μ•Ό ν•˜μ§€λ§Œ μœ„μ™€ 같은 κ²½μš°λŠ”

멈좘 μ‹œκ°„(m)만큼의 μ‹œκ°„μ΄ μ•žλ‹Ήκ²¨μ Έ (12+m)μ΄ˆλΆ€ν„° μŠ€ν†±μ›ŒμΉ˜κ°€ 돌게 λœλ‹€.

 

μ΄λŠ” ν™”λ©΄ 상에 λžœλ”λ§λ˜λŠ” μ‹œκ°„κ³Ό μ‹€μ œ μ‹œκ°„ 간에 κ³΅λ°±μ‹œκ°„μ΄ λ‚˜νƒ€λ‚˜κΈ°μ— λ°œμƒν•˜λŠ” λ¬Έμ œμ΄λ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ startTime 값에 곡백 μ‹œκ°„μ„ κ°€μ‚°ν•΄μ£Όμ–΄ μ‹œκ°„μ„ μ•žλ‹Ήκ²¨μ£Όλ©° ν•΄λ‹Ή 연산식을 처음 콜백 ν•¨μˆ˜ λ‚΄μ—μ„œ endTime(μŠ€ν†±μ›ŒμΉ˜λ₯Ό λ©ˆμ·„μ„ λ•Œμ˜ ν•΄λ‹Ή μ‹œκ°„)의 값이 μ‘΄μž¬ν•  κ²½μš°μ— μˆ˜ν–‰λ˜λ„λ‘ λΆ„κΈ° μ²˜λ¦¬ν•΄μ€€λ‹€.

 

κ³΅λ°±μ‹œκ°„(μ΄ˆλ‘μƒ‰ μ˜μ—­) = currentTime_reStart - endTime

μŠ€ν†±μ›ŒμΉ˜μ— ν‘œμ‹œλ˜λŠ” μ‹œκ°„(ms λ‹Ή)_reStart = currentTime - (startTime + κ³΅λ°±μ‹œκ°„)

 

if(!stTime) {
            stTime = Date.now();
          } else {
            stTime += (Date.now() - edTime)
          }

 

λ‹€μŒκ³Ό 같이 λΆ„(0~), 초(0~59), 미리초(0~99) 각 μ‹œκ°„μ˜ λ²”μœ„λ₯Ό ν†΅ν•΄μ„œλ„ ꡬ할 수 μžˆλ‹€.

ms += 1;
          if (ms >= 100) {
            ss += 1;
            ms = 0;
          }
          if (ss >= 60) {
            mm += 1;
            ss = 0;
          }

 

연산을 톡해 얻은 μ‹œκ°„μ„ λ¬Έμ œμ—μ„œ μš”κ΅¬ν•˜λŠ” 바와 같이 ν™”λ©΄ 상에 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ '00:00:00' λžœλ”λ§ν•˜κΈ° μœ„ν•΄μ„œ λ³„λ„μ˜ 헬퍼 ν•¨μˆ˜ λ‚΄μ—μ„œ λ‹€μŒκ³Ό 같은 연산을 μˆ˜ν–‰ν•˜λ„λ‘ ν•˜μ˜€λ‹€.

return (num) => {
        return (num < 10  ? `0${num}` : `${num}`);
      }
 // ν•΄λ‹Ή 헬퍼 ν•¨μˆ˜λŠ” μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ 객체λ₯Ό ν• λ‹Ή λ°›κ³  μžˆλ‹€.
 // λ§€κ°œλ³€μˆ˜ numλŠ” ν΄λ‘œμ €μ— μ˜ν•΄ μƒμœ„ μŠ€μ½”ν”„ 내에 μΊ‘μŠν™”λ˜μ–΄ μ μž¬λ˜μ–΄ 있으며 이 값은 ν˜„μž¬ μ‹œκ°„μ΄λ‹€.

 

전체 μ½”λ“œ

https://github.com/choi2601/FastCampus-FrontEnd-Issue/tree/main/case5_stopwatch1

 

choi2601/FastCampus-FrontEnd-Issue

패슀트캠퍼슀 ν”„λ‘ νŠΈμ—”λ“œ μ£Όμš” 이슈 풀이. Contribute to choi2601/FastCampus-FrontEnd-Issue development by creating an account on GitHub.

github.com

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2025/02   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
κΈ€ 보관함