Skip to content

Commit 6ab804c

Browse files
hj style
1 parent 508e476 commit 6ab804c

File tree

20 files changed

+112
-168
lines changed

20 files changed

+112
-168
lines changed

01 - JavaScript Drum Kit/index-FINISHED.html

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

01 - JavaScript Drum Kit/index-START.html

Lines changed: 0 additions & 66 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>&lambda; Drums</title>
6+
<link rel="stylesheet" href="style.css">
7+
<script src="index.js"></script>
8+
<link href="https://fonts.googleapis.com/css?family=Electrolize" rel="stylesheet">
9+
</head>
10+
<body>
11+
<div id="main"/>
12+
<script>
13+
main();
14+
</script>
15+
16+
</body>
17+
</html>

01 - JavaScript Drum Kit/index.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
const main = () => {
2+
3+
// layout
4+
5+
let render = (template, node) => node.innerHTML = template;
6+
7+
const codeKeys = [
8+
{key: 81, char: 'Q' },
9+
{key: 87, char: 'W' },
10+
{key: 69, char: 'E' },
11+
{key: 65, char: 'A' },
12+
{key: 83, char: 'S' },
13+
{key: 68, char: 'D' },
14+
];
15+
16+
let renderKeys = () => {
17+
18+
let keys = codeKeys.map((v, i) => {
19+
return `
20+
<div data-key=${codeKeys[i].key} class="key">
21+
<kbd>${codeKeys[i].char}</kbd>
22+
<audio data-key=${codeKeys[i].key} src=${
23+
`sounds/${codeKeys[i].key}.wav`
24+
}></audio>
25+
<div class="lambda">&lambda;</div>
26+
</div>
27+
`;
28+
});
29+
30+
render (`
31+
<div class="keys">
32+
${keys}
33+
</div>
34+
`, document.querySelector('#main'));
35+
}
36+
37+
renderKeys();
38+
39+
// ui
40+
41+
let removeTransition = (e) => {
42+
if (e.propertyName !== 'transform') return;
43+
e.target.classList.remove('playing');
44+
}
45+
46+
// playsound
47+
48+
let play = (e) => {
49+
let audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
50+
let key = document.querySelector(`div[data-key="${e.keyCode}"]`);
51+
52+
if (!audio) return;
53+
54+
key.classList.add('playing');
55+
56+
audio.play();
57+
audio.currentTime = 0;
58+
}
59+
60+
const keys = Array.from(document.querySelectorAll('.key'));
61+
62+
keys.forEach((key) => {
63+
key.addEventListener('transitionend', removeTransition)
64+
});
65+
66+
window.addEventListener('keydown', play);
67+
68+
}
10.1 KB
Binary file not shown.
10.4 KB
Binary file not shown.
11.8 KB
Binary file not shown.
40.9 KB
Binary file not shown.
37.6 KB
Binary file not shown.
71 KB
Binary file not shown.

0 commit comments

Comments
 (0)