[JavaScript30] 01 - JavaScript Drum Kit

2024. 12. 6. 22:07·스터디/JavaScript30

 

소스 코드

 

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
'스터디/JavaScript30' 카테고리의 다른 글
  • [JavaScript30] 05 - Flex Panel Gallery
  • [JavaScript30] 04 - Array Cardio Day 1
  • [JavaScript30] 03 - CSS Variables
  • [JavaScript30] 02 - JS and CSS Clock
jisunipark
jisunipark
일신우일신 | 日新又日新 압축성장 중인 개발자입니다.
  • jisunipark
    일신우일신
    jisunipark
    • 분류 전체보기 (89)
      • Frontend (12)
        • HTML ∙ CSS ∙ JavaScript (8)
        • React.js (4)
        • Next.js (0)
      • Backend (5)
        • Express.js (2)
        • Flask (3)
      • Language (27)
        • Python (24)
        • Java (3)
        • Kotlin (0)
      • Etc. (3)
        • Git ∙ GitHub (3)
      • 개발서적 (19)
        • 모던 자바스크립트 Deep Dive (16)
        • 리팩터링 2판 (3)
      • 스터디 (6)
        • JavaScript30 (5)
        • 독서 스터디 (1)
      • 배움과 성장 (4)
        • 컨퍼런스 ∙ 세미나 (1)
        • 생각 기록 (3)
      • 회고 (5)
      • English ver. (4)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jisunipark
[JavaScript30] 01 - JavaScript Drum Kit
상단으로

티스토리툴바