Skip to content

Commit da29d21

Browse files
Day 1: Drum Kit with mouse click support
1 parent a23f7ec commit da29d21

3 files changed

Lines changed: 98 additions & 151 deletions

File tree

01 - JavaScript Drum Kit/index-FINISHED.html

Lines changed: 0 additions & 84 deletions
This file was deleted.

01 - JavaScript Drum Kit/index-START.html

Lines changed: 0 additions & 67 deletions
This file was deleted.
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>JS Drum Kit</title>
6+
<link rel="stylesheet" href="style.css">
7+
<link rel="icon" href="https://fav.farm/🔥" />
8+
</head>
9+
<body>
10+
11+
12+
<section class="keys">
13+
<article data-key="65" class="key">
14+
<kbd>A</kbd>
15+
<span class="sound">Clap</span>
16+
</article>
17+
<article data-key="83" class="key">
18+
<kbd>S</kbd>
19+
<span class="sound">hihat</span>
20+
</article>
21+
<article data-key="68" class="key">
22+
<kbd>D</kbd>
23+
<span class="sound">kick</span>
24+
</article>
25+
<article data-key="70" class="key">
26+
<kbd>F</kbd>
27+
<span class="sound">openhat</span>
28+
</article>
29+
<article data-key="71" class="key">
30+
<kbd>G</kbd>
31+
<span class="sound">boom</span>
32+
</article>
33+
<article data-key="72" class="key">
34+
<kbd>H</kbd>
35+
<span class="sound">ride</span>
36+
</article>
37+
<article data-key="74" class="key">
38+
<kbd>J</kbd>
39+
<span class="sound">snare</span>
40+
</article>
41+
<article data-key="75" class="key">
42+
<kbd>K</kbd>
43+
<span class="sound">tom</span>
44+
</article>
45+
<article data-key="76" class="key">
46+
<kbd>L</kbd>
47+
<span class="sound">tink</span>
48+
</article>
49+
</section>
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>
60+
61+
<script>
62+
function removeTransition(e) {
63+
if(e.propertyName != 'transform') return;
64+
this.classList.remove('playing');
65+
66+
}
67+
function playSoundByKeyCode(keyCode) {
68+
const audio = document.querySelector(`audio[data-key="${keyCode}"]`);
69+
const key = document.querySelector(`.key[data-key="${keyCode}"]`);
70+
71+
if(!audio) return;
72+
audio.currentTime = 0;
73+
audio.play();
74+
key.classList.add('playing');
75+
}
76+
77+
function playSound(e) {
78+
playSoundByKeyCode(e.keyCode);
79+
}
80+
81+
82+
const keys = Array.from(document.querySelectorAll('.key'));
83+
keys.forEach(key => {
84+
key.addEventListener('transitionend', removeTransition);
85+
86+
key.addEventListener('click', () => {
87+
const keyCode = key.getAttribute('data-key');
88+
playSoundByKeyCode(keyCode)
89+
})
90+
});
91+
92+
window.addEventListener('keydown', playSound);
93+
94+
</script>
95+
96+
97+
</body>
98+
</html>

0 commit comments

Comments
 (0)