
<script>
function playSound(e) {
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
const key = document.querySelector(`div[data-key="${e.keyCode}"]`);
if (!audio) return;
key.classList.add("playing"); // audio.play 될때 css 효과
audio.currentTime = 0;
// 같은 키를 연달아 빠르게 눌렀을 때 반응이 없는 것을 막기 위한 예외 처리
audio.play();
}
/* 키를 누르고 난 후 */
function removeTransition(e) {
if (e.propertyName !== "transform") return;
e.target.classList.remove("playing"); // css 효과 제거
}
const keys = Array.from(document.querySelectorAll(".key"));
keys.forEach((key) =>
key.addEventListener("transitionend", removeTransition)
);
window.addEventListener("keydown", playSound);
</script>
이벤트 리스너가 호출될 때 자동으로 전달해주는 이벤트 객체
const audio = document.querySelector(audio[data-key="${e.keyCode}"]);
예시
<body>
<h1>h1</h1>
<h2 class="h2">h2</h2>
<h3 id="h3">h3</h3>
<h3>h3_2</h3>
<div>
<span>Span1</span>
<span>Span2</span>
</div>
<script src="app.js"></script>
</body>
const selected = document.querySelector("h1");
selected.style.color = "red";
const selected = document.querySelector(".h2");
selected.style.color = "red";
const selected = document.querySelector("#h3");
selected.style.color = "red";
const selected = document.querySelector("div span");
selected.style.color = "red";
Q) 왜 div를 선택하는데 span1만 빨간색이 될까?
transofrm?
HTML 요소를 이동, 회전, 크기 조정, 기울임 등을 통해 변형할 수 있게 해주는 css 속성
transition이 완료된 이후에 발생하는 이벤트, transition 완료를 감지한다
transition과 함께 사용하는 함수
addEventListenrer를 사용하여 이벤트 모니터링 가능
key.classList.add("playing");
e.target.classList.remove("playing");