原生 JavaScript30 练习 Day 1 (原生JS控制键盘模拟击鼓)

 代码如下
 
<!DOCTYPE html>
<html lang=”en”>

 

<head>
    <meta charset=”UTF-8″>
    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
    <title>Document</title>
    <link rel=”stylesheet” href=”1.css”>
</head>

 

<body>
    <div class=”keys”>
        <div data-key=”65″ class=”key”>
            <kbd>A</kbd>
            <span class=”sound”>clap</span>
        </div>
        <div data-key=”83″ class=”key”>
            <kbd>S</kbd>
            <span class=”sound”>hihat</span>
        </div>
        <div data-key=”68″ class=”key”>
            <kbd>D</kbd>
            <span class=”sound”>kick</span>
        </div>
        <div data-key=”70″ class=”key”>
            <kbd>F</kbd>
            <span class=”sound”>openhat</span>
        </div>
        <div data-key=”71″ class=”key”>
            <kbd>G</kbd>
            <span class=”sound”>boom</span>
        </div>
        <div data-key=”72″ class=”key”>
            <kbd>H</kbd>
            <span class=”sound”>ride</span>
        </div>
        <div data-key=”74″ class=”key”>
            <kbd>J</kbd>
            <span class=”sound”>snare</span>
        </div>
        <div data-key=”75″ class=”key”>
            <kbd>K</kbd>
            <span class=”sound”>tom</span>
        </div>
        <div data-key=”76″ class=”key”>
            <kbd>L</kbd>
            <span class=”sound”>tink</span>
        </div>
    </div>

    <audio data-key=”65″ src=”sounds/clap.wav”></audio>
    <audio data-key=”83″ src=”sounds/hihat.wav”></audio>
    <audio data-key=”68″ src=”sounds/kick.wav”></audio>
    <audio data-key=”70″ src=”sounds/openhat.wav”></audio>
    <audio data-key=”71″ src=”sounds/boom.wav”></audio>
    <audio data-key=”72″ src=”sounds/ride.wav”></audio>
    <audio data-key=”74″ src=”sounds/snare.wav”></audio>
    <audio data-key=”75″ src=”sounds/tom.wav”></audio>
    <audio data-key=”76″ src=”sounds/tink.wav”></audio>

 

    <script>
        (function() {
            function removeTransition(event) {
                if (event.propertyName !== ‘transform’) return; // 过滤其中一种事件
                event.target.classList.remove(‘playing’); // 移除高亮的样式
            }

 

            function playSound(event) {
                const audio = document.querySelector(`audio[data-key=”${event.keyCode}”]`); // 根据触发按键的键码,获取对应音频
                const key = document.querySelector(`div[data-key=”${event.keyCode}”]`); // 获取页面对应按钮 DIV 元素
                if (!audio) return; // 处理无效的按键事件
                // console.log(key)
                key.classList.add(‘playing’); // 改变样式
                audio.currentTime = 0; // 每次播放之后都使音频播放进度归零
                audio.play(); // 播放相应音效
            }

 

            const keys = Array.from(document.querySelectorAll(‘.key’)); // 获取页面所有按钮元素
            keys.forEach(key => key.addEventListener(‘transitionend’, removeTransition)); // 添加 transition 事件监听
            window.addEventListener(‘keydown’, playSound);

 

        })();
    </script>
</body>

 

</html>
 
音频文件可自行在网上寻找~~或加我QQ 1262060219 记得备注,谢谢