Skip to content

Commit 1a3a1d3

Browse files
committed
My implementation of Challenge 01
1 parent a0451b1 commit 1a3a1d3

File tree

1 file changed

+65
-15
lines changed

1 file changed

+65
-15
lines changed

01 - JavaScript Drum Kit/index.html

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,26 +58,76 @@
5858
<audio data-key="76" src="sounds/tink.wav"></audio>
5959

6060
<script>
61+
var keyFromCode = {
62+
"KeyA": 65,
63+
"KeyS": 83,
64+
"KeyD": 68,
65+
"KeyF": 70,
66+
"KeyG": 71,
67+
"KeyH": 72,
68+
"KeyJ": 74,
69+
"KeyK": 75,
70+
"KeyL": 76,
71+
};
6172

73+
var keyFromEvent = function(e) {
74+
var key;
75+
if(e.code) {
76+
key = keyFromCode[e.code];
77+
} else {
78+
key = e.which;
79+
}
6280

63-
function playSound(e) {
64-
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
65-
const key = document.querySelector(`.key[data-key="${e.keyCode}"]`);
66-
if (!audio) return; // stop the function from running all together
67-
audio.currentTime = 0; // rewind to the start
68-
audio.play();
69-
key.classList.add('playing');
70-
}
71-
function removeTransition(e) {
72-
if (e.propertyName !== 'transform') return; // skip it if it's not a transform
73-
this.classList.remove('playing');
74-
}
81+
return key;
82+
};
7583

76-
const keys = document.querySelectorAll('.key');
77-
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
78-
window.addEventListener('keydown', playSound);
84+
var selectDiv = function(key) {
85+
return document.querySelector('.key[data-key="' + key + '"]');
86+
};
7987

88+
var selectAudio = function(key) {
89+
return document.querySelector('audio[data-key="' + key + '"]');
90+
};
91+
92+
document.addEventListener('keydown', function(e) {
93+
var key = keyFromEvent(e);
94+
if(!key) {
95+
return;
96+
}
97+
98+
var divEl = selectDiv(key);
99+
if(divEl) {
100+
if(divEl.className.indexOf('playing') === -1) {
101+
divEl.className += ' playing';
102+
}
103+
104+
var audioEl = selectAudio(key);
105+
if(audioEl) {
106+
audioEl.play();
107+
}
108+
}
109+
});
110+
111+
document.addEventListener('keyup', function(e) {
112+
var key = keyFromEvent(e);
113+
if(!key) {
114+
return;
115+
}
116+
117+
var divEl = selectDiv(key);
118+
if(divEl) {
119+
if(divEl.className.indexOf('playing') !== -1) {
120+
divEl.className = divEl.className.replace('playing', '');
121+
}
122+
123+
var audioEl = selectAudio(key);
124+
if(audioEl) {
125+
audioEl.currentTime = 0;
126+
}
127+
}
128+
});
80129
</script>
81130

131+
82132
</body>
83133
</html>

0 commit comments

Comments
 (0)