-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.js
37 lines (30 loc) · 955 Bytes
/
app.js
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
31
32
33
34
35
36
37
const WHITE_KEYS = ["z", "x", "c", "v", "b", "n", "m"];
const BLACK_KEYS = ["s", "d", "g", "h", "j"];
const keys = document.querySelectorAll(".key");
const whiteKeys = document.querySelectorAll(".key.white");
const blackKeys = document.querySelectorAll(".key.black");
for(const key of keys){
key.addEventListener("click", () => playNote(key));
}
document.addEventListener("keydown", (e) => {
if(e.repeat){
return;
}
const key = e.key;
const whiteKeyIndex = WHITE_KEYS.indexOf(key);
const blackKeyIndex = BLACK_KEYS.indexOf(key);
if(whiteKeyIndex > -1){
playNote(whiteKeys[whiteKeyIndex]);
}else if(blackKeyIndex > -1){
playNote(blackKeys[blackKeyIndex]);
}
});
function playNote(key){
const noteAudio = document.getElementById(key.dataset.note);
noteAudio.currentTime = 0;
noteAudio.play();
key.classList.add("active");
noteAudio.addEventListener("ended", () => {
key.classList.remove("active");
});
}