|
9 | 9 |
|
10 | 10 | <!-- Buttons --> |
11 | 11 | <!-- Data attributes (data-key) wire up buttons with sounds --> |
| 12 | + <!-- http://keycode.info - nice site for getting keycodes --> |
12 | 13 | <div class="keys"> |
13 | | - <div data-key="65" class="key"> |
| 14 | + <div data-key="65" class="js-key"> |
14 | 15 | <kbd>A</kbd> |
15 | 16 | <span class="sound">clap</span> |
16 | 17 | </div> |
17 | | - <div data-key="83" class="key"> |
| 18 | + <div data-key="83" class="js-key"> |
18 | 19 | <kbd>S</kbd> |
19 | 20 | <span class="sound">hihat</span> |
20 | 21 | </div> |
21 | | - <div data-key="68" class="key"> |
| 22 | + <div data-key="68" class="js-key"> |
22 | 23 | <kbd>D</kbd> |
23 | 24 | <span class="sound">kick</span> |
24 | 25 | </div> |
25 | | - <div data-key="70" class="key"> |
| 26 | + <div data-key="70" class="js-key"> |
26 | 27 | <kbd>F</kbd> |
27 | 28 | <span class="sound">openhat</span> |
28 | 29 | </div> |
29 | | - <div data-key="71" class="key"> |
| 30 | + <div data-key="71" class="js-key"> |
30 | 31 | <kbd>G</kbd> |
31 | 32 | <span class="sound">boom</span> |
32 | 33 | </div> |
33 | | - <div data-key="72" class="key"> |
| 34 | + <div data-key="72" class="js-key"> |
34 | 35 | <kbd>H</kbd> |
35 | 36 | <span class="sound">ride</span> |
36 | 37 | </div> |
37 | | - <div data-key="74" class="key"> |
| 38 | + <div data-key="74" class="js-key"> |
38 | 39 | <kbd>J</kbd> |
39 | 40 | <span class="sound">snare</span> |
40 | 41 | </div> |
41 | | - <div data-key="75" class="key"> |
| 42 | + <div data-key="75" class="js-key"> |
42 | 43 | <kbd>K</kbd> |
43 | 44 | <span class="sound">tom</span> |
44 | 45 | </div> |
45 | | - <div data-key="76" class="key"> |
| 46 | + <div data-key="76" class="js-key"> |
46 | 47 | <kbd>L</kbd> |
47 | 48 | <span class="sound">tink</span> |
48 | 49 | </div> |
|
60 | 61 | <audio data-key="76" src="sounds/tink.wav"></audio> |
61 | 62 |
|
62 | 63 | <script> |
63 | | - window.addEventListener('keydown', function (e) { |
64 | | - console.log(e); |
65 | | - }); |
| 64 | + |
| 65 | + function playSound(e) { |
| 66 | + // console.log(e.keyCode); |
| 67 | + const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`); |
| 68 | + const key = document.querySelector(`.js-key[data-key="${e.keyCode}"]`); |
| 69 | + if (!audio) return; // if the key pressed isn't a match stop the function from running |
| 70 | + audio.currentTime = 0; // rewind audio clip to start |
| 71 | + audio.play(); |
| 72 | + key.classList.add('is-playing'); |
| 73 | + } |
| 74 | + |
| 75 | + function removeTransition(e) { |
| 76 | + if(e.propertyName !== 'transform') return // skip if it's not a transform |
| 77 | + // console.log(e.propertyName); |
| 78 | + this.classList.remove('is-playing'); |
| 79 | + } |
| 80 | + |
| 81 | + const keys = document.querySelectorAll('.js-key'); |
| 82 | + keys.forEach(key => key.addEventListener('transitionend', removeTransition)); |
| 83 | + |
| 84 | + window.addEventListener('keydown', playSound); |
66 | 85 |
|
67 | 86 | </script> |
68 | 87 |
|
|
0 commit comments