๐Ÿ“ŒLanguage/JavaScript

[#JS 30 challenge] Day 1. Drum kit ๋ฐฐ์šด ์ 

hellohailie 2022. 8. 12. 11:00

1. ์˜ค๋””์˜ค, ๋น„๋””์˜ค ์žฌ์ƒํ•˜๊ธฐ

โœ”๏ธ html์—์„œ ์˜ค๋””์˜ค๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” <audio> ํƒœ๊ทธ๋ฅผ ์“ฐ๊ณ  src๋กœ ์˜ค๋””์˜ค ์†Œ์Šค๋ฅผ ์ง€์ •ํ•œ๋‹ค. 

<audio data-key="65" src="sounds/clap.wav"></audio>

โœ”๏ธ ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ํ”Œ๋ ˆ์ด ์‹œํ‚ฌ๋•Œ๋Š” .play()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

audio.play();

โœ”๏ธ ์˜ค๋””์˜ค, ๋น„๋””์˜ค ์ผ์‹œ์ •์ง€ ์‹œํ‚ค๊ธฐ

audio.pause();

2. ์˜ค๋””์˜ค, ๋น„๋””์˜ค ์žฌ์ƒ ์‹œ์  ์„ค์ •ํ•˜๊ธฐ

audio.currentTime = 0;

โžฅ ์ดˆ ๋‹จ์œ„์ด๊ณ , 0 ๊ฐ’์ธ ๊ฒฝ์šฐ ์ฒ˜์Œ๋ถ€ํ„ฐ ์Œ์•…์„ ์žฌ์ƒํ•œ๋‹ค. 

 

3. ๋ช…์‹œ๋œ ํด๋ž˜์Šค ์ถ”๊ฐ€, ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์„œ๋“œ

 
 
โœ”๏ธ ๋ช…์‹œ๋œ ํด๋ž˜์Šค ์ถ”๊ฐ€ํ•˜๊ธฐ
์ƒ๋ ‰ํ„ฐ.classList.add("playing");

 โžฅ playing์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ

 

โœ”๏ธ ๋ช…์‹œ๋œ ํด๋ž˜์Šค ์ œ๊ฑฐํ•˜๊ธฐ

์ƒ๋ ‰ํ„ฐ.classList.remove("playing");
 
 
โœ”๏ธ ํด๋ž˜์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ œ๊ฑฐํ•˜๊ณ  false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์—†์œผ๋ฉด ํด๋ž˜์Šค ์ถ”๊ฐ€ํ•˜๊ณ  true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
์ƒ๋ ‰ํ„ฐ.classList.toggle("playing");
 
 

5. addEventListener์—์„œ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ 'transitionend'

transition์ด ์™„๋ฃŒ๋œ ์ดํ›„์— ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค. transition ์™„๋ฃŒ๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค. 

 

test.addEventListener("transitionend", addText);

    const addText = () => {
        test.innerHTML = "์ด๊ฒƒ์€ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค..";
    }

โžฅ transition์ด ๋๋‚˜๋ฉด addText ํ•จ์ˆ˜๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. 

 

key.addEventListener("transitionend", removeTransition)

โžฅ transition์ด ๋๋‚˜๋ฉด removeTransition ํ•จ์ˆ˜๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.