01 - JavaScript Drum Kit
Demo
簡介
在網頁上按下鍵盤時會發出聲音和效果
程式
<script>
(function () {
window.addEventListener("keydown", playHandler);
function playHandler(e) {
const audio = document.querySelector(
`audio[data-key="${e.keyCode}"]`
);
if (audio) {
audio.currentTime = 0;
audio.play();
}
const dom = document.querySelector(`div[data-key="${e.keyCode}"]`);
if (dom) dom.classList.add("playing");
}
document.querySelectorAll(".key").forEach((key) => {
key.addEventListener("transitionend", transitionedHandler);
});
function transitionedHandler(e) {
if (e.propertyName === "transform") {
e.target.classList.remove("playing");
}
}
})();
</script>
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
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
作法
利用
window.addEventListener
去監聽出發鍵盤- keyup 事件按下後觸發
- keydown 按著不放連續觸發
- 比較 keydown, keypress, keyup 的差異
監聽函式內去抓
audio
和div
的data-key
的 keyCode 後新增聲音和 css 樣式- ES6 寫法 template strings
- 需要注意的是 audio 設定 currentTime = 0,讓他有一個停留,不設置則會有連續不停的聲音
按下後立即移除 css 樣式
- 取得所有的 .key 後動態移除 css
- TransitionEvent.propertyName