ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๊ธฐ์กด ์ฝ”๋“œ

https://choi95.tistory.com/65

 

stopwatch

Question ์œ„์™€ ๊ฐ™์ด ์ž‘๋™ํ•˜๋Š” ์Šคํ†ฑ์›Œ์น˜๋ฅผ ๊ตฌํ˜„ํ•˜์‹œ์˜ค ์ฃผ์š” Solution_stopwatch ์‹œ๊ฐ„ ๊ตฌํ˜„ ๋ฏธ๋ฆฌ์ดˆ_ms๋งˆ๋‹ค(0~99๋ฏธ๋ฆฌ์ดˆ๋Š” 100๋ถ„์˜ 1์ดˆ => 100) setInterval() ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ํ•ด๋‹น ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ..

choi95.tistory.com

์ด์ „ stopwatch๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ธฐ๋กํ•œ LapTime์„ ํ™”๋ฉด ์ƒ์— ๋žœ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

$laps.style.display = 'grid';

        let newLap = document.createElement("div");
        newLap.setAttribute("class", "laps");
        newLap.style.display = 'grid';

        let newLapNum = document.createElement("div");
        newLapNum.setAttribute("class", "lap-title");
        newLapNum.innerHTML = `${laps.length}`

        let time = document.createElement("div");
        time.setAttribute("class", "lap-title");
        time.innerHTML = `${laps[indexLaps]}`;

        newLap.appendChild(newLapNum);
        newLap.appendChild(time);

        document.querySelector('.stopwatch').appendChild(newLap);

 

createElement()์™€ setAttribute()๋ฅผ ํ†ตํ•ด JS ๋‚ด์—์„œ ๋™์ ์œผ๋กœ laps ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค.

์œ„์™€ ๊ฐ™์ด laps ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์Šคํ†ฑ์›Œ์น˜์—์„œ Reset ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์˜€์„ ๋•Œ ํ•ด๋‹น laps ํด๋ž˜์Šค๋ช…์œผ๋กœ ๋œ ํƒœ๊ทธ๋“ค์„ ๋ชจ๋‘ ์‚ญ์ œํ•ด์ค˜์•ผ ํ•œ๋‹ค.

// Reset Event
let lapsAll = document.querySelectorAll('.stopwatch > .laps');
          lapsAll.forEach((lap, i) => {
            if(i === 0) {
              lap.style.display = 'none';
            }
            else {
              lap.remove();
            }
          });

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด Reset Event ๋‚ด์—์„œ ๋ชจ๋“  laps๋กœ ๋œ ํด๋ž˜์Šค ํƒœ๊ทธ๋“ค์„ ๋ฐฐ์—ด ์ƒ์—์„œ ์ˆœํšŒ ๋ฐ ์ฐธ์กฐํ•ด์•ผ ๋˜๋Š” ์ข…์†์„ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค.

(๋ณธ๋ž˜๋ผ๋ฉด lapTime๊ณผ ๊ด€๋ จ ๋œ ํ—ฌํผ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ด€๋ จ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์ค˜์•ผ ํ•˜๋Š”๊ฒŒ ํšจ์œจ์ ์ธ ์ปดํฌ๋„ŒํŠธ ์ธก๋ฉด์—์„œ ์ข‹์„ ๊ฒƒ์ด๋‹ค)

<์ด๋Š” ์ฒ˜์Œ์— ๋‚˜์˜ค๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ์—ญํ• ์˜ lap-title ํƒœ๊ทธ_Reset์ด ๋˜์–ด๋„ DOM ์ƒ์—์„œ ์‚ฌ๋ผ์ง€๋ฉด ์•ˆ๋˜๊ณ  display ์†์„ฑ ๊ฐ’๋งŒ none์œผ๋กœ ๋ฐ”๊พธ์–ด ํ™”๋ฉด ์ƒ์— ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋žœ๋”๋งํ•ด์•ผ ํ•จ ์™€ ์ดํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ lap๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์˜€์„ ๋•Œ ๋‚˜์˜ค๋Š” lapTime ๊ธฐ๋ก ๊ฐ„์— ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”> 

 

createDocumentFragment()๋ฅผ ํ†ตํ•œ Refactoring

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด createDocumentFragment()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

DocumentFragments ๋Š” DOM ๋…ธ๋“œ๋“ค ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋ฉ”์ธ DOM ํŠธ๋ฆฌ์˜ ์ผ๋ถ€๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์œ ์ฆˆ ์ผ€์ด์Šค๋Š” ๋‹คํ๋จผํŠธ ์กฐ๊ฐ์„ ์ƒ์„ฑํ•˜๊ณ , ์—˜๋ฆฌ๋จผํŠธ๋“ค์„ ๋‹คํ๋จผํŠธ ์กฐ๊ฐ์— ์ถ”๊ฐ€ํ•˜๊ณ  ๊ทธ ๋‹คํ๋จผํŠธ ์กฐ๊ฐ์„ DOM ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. DOM ํŠธ๋ฆฌ ๋‚ด์—์„œ ๋‹คํ๋จผํŠธ ์กฐ๊ฐ์€ ๊ทธ๊ฒƒ์˜ ๋ชจ๋“  ์ž์‹๋“ค๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

 

const createLapElement = (newLap, index) => {
        const $fragment = document.createDocumentFragment();

        const $index = document.createElement('div');
        $index.textContent = index;
        $fragment.appendChild($index);

        const $newLab = document.createElement('div');
        $newLab.textContent = formatElapsedTime(newLap);
        $fragment.appendChild($newLab);

        $laps.appendChild($fragment);

        $laps.style.display = 'grid';
      };

DocumentFragment()๋ฅผ ํ†ตํ•ด lapTime์„ ๊ธฐ๋กํ•˜๋Š” ๋‘ div ํƒœ๊ทธ๋ฅผ Wrapper๋กœ์„œ ๊ฐ์‹ธ์ฃผ๊ณ  ํ•ด๋‹น Wrapper๋ฅผ laps ํƒœ๊ทธ์— appendChild๋ฅผ ์ด์šฉํ•˜์—ฌ DOM ์ž์‹ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด laps ํด๋ž˜์Šค๋กœ ๋œ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น laps ํƒœ๊ทธ์— ์ž์‹ ์š”์†Œ๋“ค ์ค‘ CSS ๊ฐ€์ƒ ์„ ํƒ์ž not์„

์ด์šฉํ•˜์—ฌ .lap-title ํด๋ž˜์Šค๋ฅผ ์ œ์™ธ ํ•œ ๋ชจ๋“  ํƒœ๊ทธ๋“ค(๋‹คํ๋จผํŠธ ์กฐ๊ฐ_๋‘ ๊ฐœ์˜ div ํƒœ๊ทธ๋กœ ๊ตฌ์„ฑ)์„ ์‚ญ์ œํ•˜๊ฒŒ ํ•˜์˜€๋‹ค.

/ ๋žฉ ํƒ€์ž„์„ ์ดˆ๊ธฐํ™”(DOM์—์„œ ๋ชจ๋‘ ์ œ๊ฑฐ)ํ•œ๋‹ค.
      const removeAllLapElement = () => {
        document.querySelectorAll('.laps > div:not(.lap-title)').forEach($lap => $lap.remove());
        $laps.style.display = 'none';
      };
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
29 30
๊ธ€ ๋ณด๊ด€ํ•จ