티스토리 뷰

javascript30

01 - JavaScript Drum Kit - FINISHED

주먹불끈 2019. 2. 28. 18:55

개요

 

- 실습의 시작점이 되는 index-START.html, style.css 따라 타이핑하고, 이해해보았음

- 이제 동영상 강의를 보며 따라해보고, 정리하자.

 

동작

 

index-FINISHED.html 파일을 크롬 브라우저에서 열어서 완성된 동작을 확인해보자.

- F12 누르면 크롬의 DevTools 열린다.

 

1) A S D F G H J K L 키가 화면에 보인다.

- 스타일은 sytle.css 정의되어 있는 .key 이다.

 

2) 그런데 클릭을 해주면

- 스타일이 playing 되고

- 소리가 울려주는 것이다.

 

- 오른쪽의 빨간 네모가 영역들이다.

- 키를 누르면 class 부분이 key 에서 잠시 playing 되었다가

다시 key 돌아오는 보일것이다.

 

 

JavaScript

 

이제 준비된 재료들로 드럼이 동작하게 해보자.

 


키를 누르면 알아채는 리스너를 하나 만들어보자.

 

1) keydown 가지하는 리스너이고, 받은 event 바로 콘솔에 뿌리게  하였다.

2) 아래 콘솔로그처럼 a, s, d, f 눌렀을때 받은 이벤트 정보가 나온다.

 

이벤트 e 많은 값을 가지고 있고, 코드만 보려면 e.keyCode 뿌려주면 된다.


 

 

우리는 audio 태그의 data-key attribute

우리가 반응할 a, s, d, f, g, h, j, k, l keyCode 값을 넣어두었다.

 

그럼 key-down event 들어왔을때 누른 key keyCode

audio 태그의 keyCode 있는지 알아보자. (왼쪽의 코드이다.)

 

Console 에는 keyCode 있을 경우에는 해당 audio 태그가 들어있고,

없을 경우에는 null 출력된다.

 

코드를 조금만 들어다보자.

document

- 링크: https://goo.gl/Gu5JBF

- 브라우저가 불러온 웹페이지 객체 자체를 의미한다.

document.querySelector()

- css Selector 선택할 있게 해주며

- Selector 로는 id, class, 태그명[속성명=속성값] 등등을 있다.

여기서는 태그명[속성명=속성값] 사용한 것이다.

1) 매칭되는 keyCode 없으면 바로  리턴해버리고,

2) 매칭이 되면 audio.play(); 실행해도 소리가 나는 것을 확인할 있다.

 

- 그런데, 같은 키를 연달아 누르면 바로 소리가 나지 않는다.

audio.currentTime = 0 먹여주면 된다.

이미 play 중인 오디오 파일도 현재 play 되는 시간 0 second 되돌려 주는것이다.


지금까지는 특정 키를 눌렀을때 그에 해당하는 소리 나게 했다.

이번에는 덩달아 키의 모양에 변화 줘보자.

.key .playing 으로 바꿔주는 것이다.

 

 

 

 




.key 에서 data-key 값과 e.keyCode 매칭되는 녀석을 찾고,

key playing 이라는 class 추가해주면 되는 것이다.

.key transition: all .07s ease; 먹히며 변경되는 것이다.

 

그런데 .key .playing 으로 스타일이 transition 하며 변경하는 까지는 좋은데

원래대로 돌아오지 않는다.

 

key.classList.add() 스타일을 추가해주는 것은 마치 포토샵의 레이어를 올린 느낌이다.

이렇게 추가해준 스타일 "레이어" classList.Remove() 날려버려야 하는 것이다.

원래대로 돌아오게 하려면, Transition 끝나는 확인하고,

그때 되돌리면 될것 같다.

 

1) 우선 모든 .key class 사용하는 녀석들을 모두 찾아서

2) 놈들 모두에게 addEventListener() 해주는데

3) 'transitionend' 경우에 removeTransition() 콜백 함수 실행하게 하는 것이다.

4) removeTransition() 함수는 일단 event console 뿌려주게 했다.

 

 

 

 

 

 

 

그랬더니 한번 클릭에 난리가 나버렸다. 무려 6개의 transitionend event 발생.

 

propertyName

- border-left-color

- border-right-color

- border-top-color

- transform

- box-shadow

- border-bottom-color

 

녀석들 모두 transitionend 일어난 것이다.

이중에 transform 감시하면 같다. 

e.propertyName 'transform' 경우에만

'playing' class remove 해주니 문제 해결! 구현 완료.

 

console.log(this); 해보니 역시 .key 사용하는 div 태그였다.

 

정말 최종.

콜백 익명함수를 playSound() 함수로 따로 뺐다. Wes Bro 선호하는 방식.

이게 알아보기 쉽기는 하다.

 

 

마무리하며

 

이번에는 하나씩 따라하며 동영상의 단계를 모두 정리하였지만,

다음에는 이렇게까지 필요는 없지 싶다.

많이 배우고 나름 즐거웠다.


반응형

'javascript30' 카테고리의 다른 글

06 - Type Ahead  (0) 2019.03.08
05 - Flex Panel Gallery  (0) 2019.03.06
04 - Array Cardio Day 1  (0) 2019.03.05
01 - JavaScript Drum Kit - START  (0) 2019.02.28
Start JavaScript 30 - 공부방법 업데이트  (2) 2019.02.28
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함