JavaScript30天(day1击鼓小游戏)
当按下键盘中“A S D F G H J K L”的任意一个时,发出不同的击鼓声并伴随简单视觉显示效果。  js30官方网站https://javascript30.com/
html+css部分
结构部分
 kbd:它用来表示文本是从键盘上键入的。 每个按键都被装在一个类名为key的div里 data:是自定义的属性,用来绑定音频 音频被装在audio里通过data-key和按键绑定 样式部分
 
js部分
<script>
function playSound(e) {
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`)
const key = document.querySelector(`div[data-key="${e.keyCode}"]`)
if (!audio) return
key.classList.add('playing');
audio.currentTime = 0;
audio.play();
}
function removePlaying(e) {
if (e.propertyName !== 'transform') return;
event.target.classList.remove('playing');
}
const keys = document.querySelectorAll('.key');
keys.forEach(key => key.addEventListener('transitionend', removePlaying));
window.addEventListener('keydown', playSound);
</script>
|