document.addEventListener("keydown", playSound);
키보드가 눌리는 이벤트(keydown)이 발생하면
'playSound' 콜백함수가 실행된다.
function playSound(e) {
// 누른 key의 keyCode 받아오기
const keyCode = e.keyCode;
// 객체 받아오기
// attribute selector 이용
const audio = document.querySelector(`audio[data-key='${keyCode}'`);
const key = document.querySelector(`.key[data-key='${keyCode}'`);
// 오디오 객체가 없으면 끝내기
if (!audio) return;
audio.currentTime = 0; // 계속 소리나게 함
audio.play();
key.classList.add("playing"); // css style 적용
}
선택자를 이용해 html element를 가져온다.
선택자에 해당하는 요소가 여러개 있으면 DOM tree 맨 위에 있는 요소가 들어온다.
https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector
<audio> 태그를 가져오면 audio.play()로 소리를 출력할 수 있다.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio
css요소인 transform과 transition.
html 요소를 회전,확대등 변형시킨다.
어떤 element의 css가 변경(적용되는 선택자가 바뀜)될 때,
transition을 적용할 css 속성과 변경되는 시간을 지정한다.
https://developer.mozilla.org/en-US/docs/Web/CSS/transition
// 2. 각 key마다 transitionend 됐을때
const keys = document.querySelectorAll(".key");
keys.forEach((key) =>
key.addEventListener("transitionend", removeTransition)
);
function removeTransition(e) {
// transition event중 가장 늦게 끝나는 transform이 끝나면 수행
if (e.propertyName !== "transform") {
return;
}
this.classList.remove("playing"); // css style 삭제
}
transition이 끝나는 이벤트가 발생하면, (transitionend)
그 element를 받아와서 css변경할 때 쓰였던 class attribute를 삭제한다.