|
10 | 10 |
|
11 | 11 |
|
12 | 12 | <div class="keys">
|
13 |
| - <div data-key="65" class="key"> |
| 13 | + <div data-key="KeyA" class="key"> |
14 | 14 | <kbd>A</kbd>
|
15 | 15 | <span class="sound">clap</span>
|
16 | 16 | </div>
|
17 |
| - <div data-key="83" class="key"> |
| 17 | + <div data-key="KeyS" class="key"> |
18 | 18 | <kbd>S</kbd>
|
19 | 19 | <span class="sound">hihat</span>
|
20 | 20 | </div>
|
21 |
| - <div data-key="68" class="key"> |
| 21 | + <div data-key="KeyD" class="key"> |
22 | 22 | <kbd>D</kbd>
|
23 | 23 | <span class="sound">kick</span>
|
24 | 24 | </div>
|
25 |
| - <div data-key="70" class="key"> |
| 25 | + <div data-key="KeyF" class="key"> |
26 | 26 | <kbd>F</kbd>
|
27 | 27 | <span class="sound">openhat</span>
|
28 | 28 | </div>
|
29 |
| - <div data-key="71" class="key"> |
| 29 | + <div data-key="KeyG" class="key"> |
30 | 30 | <kbd>G</kbd>
|
31 | 31 | <span class="sound">boom</span>
|
32 | 32 | </div>
|
33 |
| - <div data-key="72" class="key"> |
| 33 | + <div data-key="KeyH" class="key"> |
34 | 34 | <kbd>H</kbd>
|
35 | 35 | <span class="sound">ride</span>
|
36 | 36 | </div>
|
37 |
| - <div data-key="74" class="key"> |
| 37 | + <div data-key="KeyJ" class="key"> |
38 | 38 | <kbd>J</kbd>
|
39 | 39 | <span class="sound">snare</span>
|
40 | 40 | </div>
|
41 |
| - <div data-key="75" class="key"> |
| 41 | + <div data-key="KeyK" class="key"> |
42 | 42 | <kbd>K</kbd>
|
43 | 43 | <span class="sound">tom</span>
|
44 | 44 | </div>
|
45 |
| - <div data-key="76" class="key"> |
| 45 | + <div data-key="KeyL" class="key"> |
46 | 46 | <kbd>L</kbd>
|
47 | 47 | <span class="sound">tink</span>
|
48 | 48 | </div>
|
49 | 49 | </div>
|
50 | 50 |
|
51 |
| - <audio data-key="65" src="sounds/clap.wav"></audio> |
52 |
| - <audio data-key="83" src="sounds/hihat.wav"></audio> |
53 |
| - <audio data-key="68" src="sounds/kick.wav"></audio> |
54 |
| - <audio data-key="70" src="sounds/openhat.wav"></audio> |
55 |
| - <audio data-key="71" src="sounds/boom.wav"></audio> |
56 |
| - <audio data-key="72" src="sounds/ride.wav"></audio> |
57 |
| - <audio data-key="74" src="sounds/snare.wav"></audio> |
58 |
| - <audio data-key="75" src="sounds/tom.wav"></audio> |
59 |
| - <audio data-key="76" src="sounds/tink.wav"></audio> |
| 51 | + <audio data-key="KeyA" src="sounds/clap.wav"></audio> |
| 52 | + <audio data-key="KeyS" src="sounds/hihat.wav"></audio> |
| 53 | + <audio data-key="KeyD" src="sounds/kick.wav"></audio> |
| 54 | + <audio data-key="KeyF" src="sounds/openhat.wav"></audio> |
| 55 | + <audio data-key="KeyG" src="sounds/boom.wav"></audio> |
| 56 | + <audio data-key="KeyH" src="sounds/ride.wav"></audio> |
| 57 | + <audio data-key="KeyJ" src="sounds/snare.wav"></audio> |
| 58 | + <audio data-key="KeyK" src="sounds/tom.wav"></audio> |
| 59 | + <audio data-key="KeyL" src="sounds/tink.wav"></audio> |
60 | 60 |
|
61 | 61 | <script>
|
| 62 | + function playSound(e) { |
| 63 | + const audio = document.querySelector(`audio[data-key = "${e.code}"]`); |
| 64 | + const key = document.querySelector(`.key[data-key = "${e.code}"]`); |
| 65 | + if(!audio) return; |
| 66 | + audio.currentTime = 0; |
| 67 | + audio.play(); |
| 68 | + key.classList.add('playing'); |
| 69 | + } |
| 70 | + function removeTransition(e) { |
| 71 | + if(e.propertyName !== 'transform') return; |
| 72 | + this.classList.remove('playing'); |
| 73 | + } |
| 74 | + |
| 75 | + const keys = document.querySelectorAll(".key"); |
| 76 | + keys.forEach(key => key.addEventListener('transitionend', removeTransition )); |
| 77 | + window.addEventListener("keydown",playSound); |
| 78 | + // figure out why playSound works vs playSound(). What's the difference? |
62 | 79 |
|
63 | 80 | </script>
|
64 | 81 |
|
|
0 commit comments