创造你的个性化电子鼓网页:互动音乐之旅

220 阅读4分钟

创造你的个性化电子鼓网页:互动音乐之旅

在数字时代,音乐制作和演奏已不再局限于实体乐器,网页技术的发展为我们打开了无限可能。想象一下,只需轻敲键盘,就能在网页上体验电子鼓的魔力,享受即时的音乐创作乐趣。本文将引导你从零开始,构建一个既美观又实用的电子鼓网页应用,它不仅能够响应键盘敲击,还能展示生动的视觉反馈和真实的鼓声效果。让我们一起踏上这段创意编程的旅程吧!

一、项目概述

我们的目标是创建一个互动式的电子鼓网页,用户通过键盘敲击不同的键位,可以触发对应的鼓点声音,并且每个“鼓面”在被“敲击”时会呈现动画效果,增添真实感和趣味性。这一项目将涵盖HTML、CSS、JavaScript三大前端技术,通过它们的协同工作,实现视觉与听觉的双重盛宴。

二、总体设计

image.png

image.png

三、HTML结构设计

首先,我们得构建基础的HTML结构,为每个鼓组件准备容器。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RichWeb Application With Html-5</title>
    <link rel="stylesheet" href="./common.css">
</head>
<body>
    
    <div class="keys">
        <div class="key" data-key="65">
            <div class="title" >A</div>
            <span class="sound">clap</span>
        </div>
        <div class="key" data-key="83">
            <div class="title" >S</div>
            <span class="sound">hihat</span>
        </div>
        <div class="key" data-key="68">
            <div class="title">D</div>
            <span class="sound">kick</span>
        </div>
        <div class="key" data-key="70">
            <div class="title">F</div>
            <span class="sound">openhat</span>
        </div>
        <div class="key" data-key="71">
            <div class="title">G</div>
            <span class="sound">boom</span>
        </div>
        <div class="key" data-key="72">
            <div class="title">H</div>
            <span class="sound">sound</span>
        </div>
        <div class="key" data-key="74">
            <div class="title">J</div>
            <span class="sound">snare</span>
        </div>
        <div class="key" data-key="75">
            <div class="title">K</div>
            <span class="sound">tom</span>
        </div>
        <div class="key" data-key="76">
            <div class="title">L</div>
            <span class="sound">tink</span>
        </div>
    </div>
    
    <script src="./common.js">
        //静态页面
    </script>
</body>
</html>

这里,keys 是大盒子,每个 key 是中盒子,包含一个小盒子用于显示对应键盘键位(如A、S等),

四、CSS美化布局

接下来,通过CSS让这个鼓垫更加生动和吸引人。

html{
    font-size: 10px;/*  css inhert */
    background: url('./background.jpg') bottom center;
    background-size: cover;
}
html,body{
    height:100%;
}

.keys{
    display: flex;
    min-height: 100%;
    align-items: center;
    justify-content: center;
}

.key{
    border: 4px solid #000;
    border-radius: 5px;
    margin: 10px;
    font-size: 15px;
    padding:  10px 5px;
    /*过渡动画*/
    transition: all .7s ease;  
    width: 100px;
    text-align: center;
    color: white;
    background: rgba(0,0,0,4);
    text-shadow: 0 0 .5rem black;  /* 字体阴影 立体感*/
}


.key .title{
    font-size: 40px;
}

.sound{
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #ffc600;
}
.playing{
    transform: scale(1.1);
    border-color: #ffc600;
    box-shadow: 0 0 5px #ffc600;
}

这段CSS代码赋予了页面一个背景增加了阴影效果和过渡动画,让整体视觉更加动感。

五、JavaScript交互逻辑

最后,我们使用JavaScript来实现键盘事件监听和音效触发。

const keys= document.querySelectorAll('.key');

for(let i=0;i<keys.length;i++){
    let key = keys[i];
}
const  playSound=(event)=>{
    const keyCode =event.keyCode;
    const ele=document.querySelector(`.key[data-key="${keyCode}"]`)

    if(ele){
        ele.classList.add('playing');
        switch(keyCode) {
            case 65:
                const audio1=new Audio('./sounds/clap.wav');
                audio1.play();
                break;
            case 83:
                const audio=new Audio('./sounds/hihat.wav');
                audio.play();
                break;
            case 68:
                const audio2=new Audio('./sounds/kick.wav');
                audio2.play();
                break;
            case 70:
                const audio3=new Audio('./sounds/openhat.wav');
                audio3.play();
                break;
            case 71:
                const audio4=new Audio('./sounds/boom.wav');
                audio4.play();
                break;
            case 72:
                const audio5=new Audio('./sounds/ride.wav');
                audio5.play();
                break;
            case 74:
                const audio6=new Audio('./sounds/snare.wav');
                audio6.play();
                break;
            case 75:
                const audio7=new Audio('./sounds/tom.wav');
                audio7.play();
                break;
            case 76:
                const audio8=new Audio('./sounds/tick.wav');
                audio8.play();
                break;
            default:
                console.log('default');
                break;
        }
        setTimeout(()=>{
            ele.classList.remove('playing');
    
    },800)
    }
}

window.addEventListener('keyup',playSound)

在上述JS代码中,我们为整个文档添加了一个键盘按下事件监听器。当用户按下键盘上的某个键时,程序会查找具有相应数据键属性(key-code)。如果找到,就播放其关联的音频,并给该鼓垫添加一个短暂的激活动画效果。动画结束后,通过setTimeout函数移除激活状态,恢复鼓垫原貌,等待下一次敲击。

六、展示效果

image.png

image.png

七、总结与展望

通过上述步骤,我们成功创建了一个基本但功能完整的电子鼓网页应用。用户可以即兴演奏,体验数字化音乐创造的乐趣。当然,这只是一个起点,你可以进一步扩展功能,比如增加更多鼓点、调整视觉效果、甚至引入动态背景图(利用wanx生成的图片作为鼓垫背景),或是加入音效调节选项,让用户体验更加丰富多变。

随着技术的不断进步,结合Web Audio API等更高级的技术,还可以探索更多音效处理和合成的可能性,使这个电子鼓网页变成一个强大的音乐创作平台。音乐与编码的融合,无疑为数字艺术开辟了新的边界,让我们一起探索这无限的创造力空间吧!