
소스 코드
JavaScript30/01 - JavaScript Drum Kit at master · jisunipark/JavaScript30
30 Day Vanilla JS Challenge. Contribute to jisunipark/JavaScript30 development by creating an account on GitHub.
github.com
Today I Learned
audio.currentTime = 0
function playSound(e) {
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
const key = document.querySelector(`.key[data-key="${e.keyCode}"]`);
if (!audio) return; // stop the function from running all together
audio.currentTime = 0; // rewind to the start
audio.play();
key.classList.add('playing');
}
keydown 이벤트가 연속으로 발생 시 해당하는 오디오가 완료되기까지 기다리지 않고 바로 처음부터 재생할 수 있도록 하려면 소리 재생 시 audio.currentTime을 0을 설정해주면 된다.
스스로 만들어보면서는 play 중인 다른 오디오가 있다면 그 오디오를 정지시키는 방식으로 접근하려 해서 복잡해졌는데 조금만 다르게 접근해보면 코드 한 줄로 끝낼 수 있었던 것이었다.
transitionend 이벤트
function removeTransition(e) {
if (e.propertyName !== 'transform') return; // skip it if it's not a transform
this.classList.remove('playing');
}
function removeTransition(e) {
if (e.propertyName !== 'transform') return; // skip it if it's not a transform
this.classList.remove('playing');
}
transitionend 이벤트라는 게 있다. CSS transition이 완료되면 발생하는 이벤트이다. press된 키의 UI를 강조해주는 playing 클래스를 추가 후 트랜지션이 종료되면 해당 클래스를 제거하기 위해 사용되었다.
참고
🔊 웹에서 음악 객체(Audio) 다루기
HTML Audio 태그 HTML 태그는 웹 페이지에서 오디오를 재생하기 위해 사용되는 요소이다. MP3, WAV, OGG 등 다양한 오디오 포맷 파일을 웹에서 재생할 수 있다. audio 태그 속성 속성 값 설정 내용 src 파일
inpa.tistory.com
'스터디 > JavaScript30' 카테고리의 다른 글
[JavaScript30] 05 - Flex Panel Gallery (0) | 2024.12.10 |
---|---|
[JavaScript30] 04 - Array Cardio Day 1 (0) | 2024.12.07 |
[JavaScript30] 03 - CSS Variables (1) | 2024.12.07 |
[JavaScript30] 02 - JS and CSS Clock (3) | 2024.12.06 |