-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
39 lines (32 loc) · 1.03 KB
/
Copy pathapp.js
File metadata and controls
39 lines (32 loc) · 1.03 KB
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
38
39
const pianoKeys = document.querySelectorAll('.piano-keys .key')
const volumeSilder = document.querySelector('.volume-slider input')
const keysCheckBox = document.querySelector('.keys-checkbox input')
let allKeys = []
let audio = new Audio(`tunes/c.wav`)
const playTune = (key) => {
audio.src = `tunes/${key}.wav`
audio.play()
const clickedKey = document.querySelector(`[data-key=$(key)]`)
clickedKey.classList.add('active');
setTimeout(()=>{
clickedKey.classList.remove('active')
},150)
}
pianoKeys.forEach(key => {
allKeys.push(key.dataset.key)
key.addEventListener('click',()=>playTune(key.dataset.key))
})
const handleVolume = (e) => {
audio.volume = e.target.value
}
const showHideKeys = () => {
pianoKeys.forEach(key => key.classList.toggle('hide'))
}
const pressedKeys = (e) => {
if (allKeys.includes(e.key)){
playTune(e.key)
}
}
keysCheckBox.addEventListener('click',showHideKeys)
volumeSilder.addEventListener('input',handleVolume)
document.addEventListener('keydown',pressedKeys)