JavaScript30-1
less than 1 minute read
javascript로 드럼킷트 만들기(JavaScript Drum Kit)
목표: 키보드 키 누를 때 애니메이션효과 및 소리나게하기
과정
- 키 입력시 클래스추가 및 소리나게 작동
- 작동 종료 시점에 효과 remove
코드분석
function playSound(e){
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
const key = document.querySelector(`.key[data-key="${e.keyCode}"]`);
if(!audio) return;
audio.currentTime = 0; //키 재입력 시간설정(연속입력 가능하도록)
audio.play();
key.classList.add('playing');
//console.log(key);
}
function removeTransition(e){
if(e.propertyName !== 'transform') return; //속성명에서 transform없으면 return
console.log(this) //엘리먼트
this.classList.remove('playing');
}
const keys = Array.from(document.querySelectorAll('.key')); //keys배열에 담고
keys.forEach(key => key.addEventListener('transitionend', removeTransition)); //반복자 forEach사용해서 실행
window.addEventListener('keydown', playSound);
알게 된 내용 & 찾아 본 내용:
- forEach(): 주어진 callback을 배열에 있는 각 요소에 대해 오름차순으로 한 번씩 실행(반복문)
- 객체의 요소들이 callback 함수에 순서대로 호출됨
- for문에 비해 좀 더 깔끔하고 직관적
- for문은 continue나 break로 반복을 제어 할 수 있지만 forEach는 throw(예외)를 발생시키지 않으면 중간에 반복을 종료 할 수 없다.
<kbd>
태그: 키보드 입력을 지정 할 때
- keydown: 키를 누를 때 작동(keyup: 키를 누르고 뗄 때 작동)
- currentTime
참고
https://yuddomack.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Array-forEach
결과물
https://ha0ha0.github.io/javascript30/1/index-START.html