模拟实现打鼓效果(小demo,可搬运)

话不多说,直接上代码!

     <p class="intro">请在键盘上按下对应的键(模拟打鼓效果)</p>
     <ul class="wrapper">
        <li data-key="65">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundsclap.wav"></audio>
            <p>
                A
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="83">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundshihat.wav"></audio>
            <p>
                S
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="68">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundskick.wav"></audio>
            <p>
                D
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="70">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundsopenhat.wav"></audio>
            <p>
                F
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="71">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundsboom.wav"></audio>
            <p>
                G
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="72">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundsride.wav"></audio>
            <p>
                H
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="74">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundssnare.wav"></audio>
            <p>
                J
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="75">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundstom.wav"></audio>
            <p>
                K
                <span>CLAP</span>
            </p>
        </li>
        <li data-key="76">
            <audio src="./sounds/01 - JavaScript Drum Kitsoundstink.wav"></audio>
            <p>
                L
                <span>CLAP</span>
            </p>
        </li>
    </ul>

 html,
    body,
    ul,
    li,
    p {
        margin: 0;
        padding: 0;
    }

    body {
        text-align: center;
    }

    .intro {
        margin: 150px 0 0;
        text-align: center;
        font-size: 24px;
        font-weight: 700;
        letter-spacing: 5px;
    }

    .wrapper {
        display: inline-block;
        height: 80px;
        margin: 50px 0 0;
    }

    /* 当用户按下键时,对应的盒子改变样式 */
    .playing {
        border-color: #f8c306 !important;
        transform: scale(1.2);
    }

    .wrapper li {
        float: left;
        width: 100px;
        height: 80px;
        margin-right: 20px;
        border: 5px solid #111;
        border-radius: 10px;
        background-color: #aaa;
        list-style: none;
        font-size: 28px;
        color: #f1f1f1;
        font-weight: 400;
        text-shadow: 1px 1px 5px #111;
        transition: all 0.1s;
    }

    .wrapper li:last-of-type {
        margin: 0;
    }

    li p {
        margin: 10px 0;
    }

    li span {
        display: block;
        text-shadow: 2px 2px 5px #111;
        font-size: 12px;
        color: #f8c306;
    }

  // 定义一个包含了 有效的按键的集合
        let drumKey = new Set([65, 83, 68, 70, 71, 72, 74, 75, 76]);

        document.onkeydown = function (e) {
            // 如果按下的键不是有效的,则什么也不会发生
            if (!drumKey.has(e.keyCode)) {
                return;
            }

            let clickList = document.querySelector(`li[data-key="${e.keyCode}"]`);            // 获取与按下的键匹配的li元素
            clickList.children[0].currentTime = 0;       // 每次播放都从头开始
            clickList.children[0].play();                // 播放音频
            clickList.classList.add("playing");          // 改变样式
            clickList.addEventListener("transitionend", function () {
                clickList.classList.remove("playing");       // 动画过渡结束后,变回初始样式
            })

        }

音频文件地址:Web-H5-C3-JavaScript/Drum Demo - Audio File at main · XiaoEr-Who/Web-H5-C3-JavaScript (github.com)

代码实现效果图:

 

注意:此demo的实现参考了 JavaScript30 - 一个月纯 JS 挑战中文指南 | JavaScript30

如果想了解更多小案例的实现,可以去借鉴一下

小知识点:

在写这个demo的时候,阅读了     AudioContext - Web API 接口参考 | MDN

这个接口是用于控制音频的,允许开发者来自选音频源,对音频添加特效,使音频可视化,添加空间效果(如平移).

如果想实现更多复杂的与音频有关的案例,可以参考一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值