50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Sound Board(音响控制面板)

news2025/6/6 23:59:52

📅 我们继续 50 个小项目挑战!—— SoundBoard 组件

  • 仓库地址:https://github.com/SunACong/50-vue-projects

  • 项目预览地址:https://50-vue-projects.vercel.app/

在这里插入图片描述


🎯 组件目标

  • 实现一个响应式按钮面板,点击某一按钮即可播放对应音频。

  • 点击新按钮时自动停止其他音效,确保每次只有一个音频在播放。

  • 利用 Vue3 组合式 API + 原生 DOM 控制,打造高效小巧的功能组件。

🛠️ 技术实现点

  • 使用 Vue3 <script setup> 编写逻辑,简洁明了。

  • 利用 ref 存储音频列表数据,支持动态遍历。

  • 使用 document.getElementById 原生 API 获取音频 DOM 元素,控制播放行为。

  • Tailwind CSS 控制按钮样式及悬停动画,增强交互感。

🧱 组件实现源码(含注释)

<template>
    <div class="flex h-screen items-center gap-10 justify-center text-black">
        <!-- 遍历音效列表,渲染按钮,每个按钮对应一个 <audio> 元素 -->
        <div
            class="rounded-lg border-2 bg-gray-300 px-8 py-4 hover:scale-105 hover:bg-gray-400"
            v-for="(item, index) in soundList"
            :key="item.id"
            @click="handlePlayAudio(index)">
            {{ item.name }}
            <audio :id="item.id" :src="item.src"></audio>
        </div>
    </div>
</template>

<script setup>
import { ref } from 'vue'

// 音效播放控制函数
const handlePlayAudio = (index) => {
    // 暂停所有音效,重置播放进度
    soundList.value.forEach((sound) => {
        const audio = document.getElementById(sound.id)
        audio.pause()
        audio.currentTime = 0
    })

    // 播放当前选中的音效
    const selectedAudio = document.getElementById(soundList.value[index].id)
    selectedAudio.play()
}

// 音效列表:可以根据需求拓展为动态加载或远程配置
const soundList = ref([
    { id: 1, name: 'applause 👏', src: '/src/assets/sounds/applause.mp3' },
    { id: 2, name: 'boo 😒', src: '/src/assets/sounds/boo.mp3' },
    { id: 3, name: 'gasp 😲', src: '/src/assets/sounds/gasp.mp3' },
    { id: 4, name: 'tada 🎉', src: '/src/assets/sounds/tada.mp3' },
    { id: 5, name: 'victory 🏆', src: '/src/assets/sounds/victory.mp3' },
    { id: 6, name: 'wrong ❌', src: '/src/assets/sounds/wrong.mp3' },
])
</script>

💡 样式与逻辑讲解

  • 样式部分
类名功能描述
flex h-screen items-center justify-center垂直居中音效按钮面板
gap-10按钮之间间距
rounded-lg border-2 px-8 py-4按钮基础样式
hover:scale-105 hover:bg-gray-400鼠标悬停时的放大 + 背景变化动画
text-black 文字颜色
  • 逻辑部分
函数功能
handlePlayAudio(index)播放第 index 个音效,并停止其他音频
soundList音效数据源,每个元素包含 id、name、src 三个字段
document.getElementById()获取原生 DOM 元素,用于控制 标签

🧾 常量定义 + 组件路由建议

constants/index.js 添加组件预览常量:

export const projectList = [
{
        id: 9,
        title: 'Sound Board',
        image: 'https://50projects50days.com/img/projects-img/9-sound-board.png',
        link: 'SoundBoard',
    },
]

router/index.js 中添加路由选项:

{
        path: '/SoundBoard',
        name: 'SoundBoard',
        component: () => import('@/projects/SoundBoard.vue'),
    },

🧾 总结

本组件展示了如何在 Vue3 中结合 DOM 操作与响应式数据,实现一个轻量级、趣味性十足的音效选择器,非常适合作为日常 UI 组件库的娱乐增强模块。


👉 下一篇,我们将完成 Dad Jokes组件,一个利用公共的API获取数据随机生成笑话的组件!🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于大数据的基础知识(一)——定义特征结构要素

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;一&a…

chrome使用手机调试触屏web

chrome://inspect/#devices 1、手机开启调试模式、打开usb调试 2、手机谷歌浏览器打开网站 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f1ef2d2c017c477ba55a57338ae13fc8.jpeg#pic_center 使用谷歌浏览器打开chrome://inspect/#devices 刷新浏览器点击inspect…

python版若依框架开发:项目结构解析

python版若依框架开发 从0起步&#xff0c;扬帆起航。 python版若依部署代码生成指南&#xff0c;迅速落地CURD&#xff01;项目结构解析 文章目录 python版若依框架开发前端后端 前端 后端

day34- 系统编程之 网络编程(TCP)

一、补充 ip地址:除了本机地址如&#xff1a;192.168.0.151还可以使用&#xff08;自己测试&#xff09;本地回环地址&#xff08;127.0.0.1&#xff09;或者使用htonl(INADDR_ANY)&#xff1b; 二、模式 C/S 模式 ->服务器/客户端模型&#xff1a;TCP传输控制协议 2.1 …

鸿蒙jsonToArkTS_工具exe版本来了

前言导读 相信大家在学习鸿蒙开发过程中最痛苦的就是编写model 类 特别是那种复杂的json的时候对不对&#xff0c; 这时候有一个自动化的工具给你生成model是不是很开心。我们今天要分享的就是这个工具 JsonToArkTs 的用法 工具地址 https://gitee.com/qiuyu123/jsontomodel…

DeviceNet转Modbus TCP网关的远程遥控接收端连接研究

在港口码头作业中&#xff0c;遥控器因其精确的操作控制和稳定的性能&#xff0c;已成为起重机货物装卸作业的重要辅助工具。然而&#xff0c;在某港口码头实施无线遥控器远程控制掘进机的过程中&#xff0c;由于通信协议的不兼容&#xff0c;遭遇了技术难题。具体而言&#xf…

ASP.NET Core 中间件深度解析:构建灵活高效的请求处理管道

在现代Web应用开发中&#xff0c;请求处理管道的设计和实现至关重要。ASP.NET Core通过其中间件(Middleware)系统提供了一种高度灵活、可扩展的方式来构建请求处理管道。本文将全面深入地探讨ASP.NET Core中间件的概念、工作原理、实现方式以及最佳实践&#xff0c;帮助开发者掌…

从0到1认识ElasticStack

一、ES集群部署 操作系统Ubuntu22.04LTS/主机名IP地址主机配置elk9110.0.0.91/244Core8GB100GB磁盘elk9210.0.0.92/244Core8GB100GB磁盘elk9310.0.0.93/244Core8GB100GB磁盘 1. 什么是ElasticStack? # 官网 https://www.elastic.co/ ElasticStack早期名称为elk。 elk分别…

I2C 外设知识体系:从基础到 STM32 硬件实现

文章目录 I2C外设简介I2C 通信实现方式对比1. 软件模拟 I2C2. 硬件实现 I2C STM32 I2C 外设核心功能1. 硬件特性2. 寄存器与引脚 I2C框图一、引脚接口二、数据处理模块三、时钟控制模块四、控制逻辑模块五、辅助功能 I2C基本结构主机发送一、7 位主发送序列二、10 位主发送序列…

文件索引:数组、二叉树、二叉排序树、平衡树、红黑树、B树、B+树

参考链接&#xff1a;https://www.bilibili.com/video/BV1mY4y1W7pS 数据结构可视化工具&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 问题引出&#xff1a;一般是什么原因导致从磁盘查找数据效率低&#xff1f; 通过索引来更快的查询数据&a…

《仿盒马》app开发技术分享-- 商品搜索页(顶部搜索bar热门搜索)(端云一体)

开发准备 随着开发功能的逐渐深入&#xff0c;我们的应用逐渐趋于完善&#xff0c;现在我们需要继续在首页给没有使用按钮以及组件添加对应的功能&#xff0c;这一节我们要实现的功能是商品搜索页面&#xff0c;这个页面我们从上到下开始实现功能&#xff0c;首先就是一个搜索…

Tensorborad

一、tensorboard的基本操作 1.1 发展历史 TensorBoard 是 TensorFlow 生态中的官方可视化工具&#xff08;也可无缝集成 PyTorch&#xff09;&#xff0c;用于实时监控训练过程、可视化模型结构、分析数据分布、对比实验结果等。它通过网页端交互界面&#xff0c;将枯燥的训练…

工业自动化DeviceNET从站转Ethernet/IP主站网关赋能冶金行业工业机器人高效运行

在冶金行业高速发展的当下&#xff0c;对生产效率与精度的要求不断攀升。工业机器人凭借其精准、高效的特性&#xff0c;在钻孔、铣削、切割、弯曲、冲压等加工工艺中广泛应用。然而&#xff0c;不同设备间的通信协议差异常成为制约系统协同的瓶颈。JH-DVN-EIP疆鸿智能DeviceNE…

开源数据库MySQL 与 PostgreSQL的巅峰对决。

MySQL 与 PostgreSQL 是两大主流开源关系型数据库&#xff0c;其核心差异主要体现在架构设计、功能特性、性能优化及适用场景上。结合最新技术对比和行业实践&#xff0c;以下为深度解析&#xff1a; &#x1f9e0; ​​一、架构与设计哲学​​ ​​维度​​​​PostgreSQL​​…

从 LeetCode 到日志匹配:一行 Swift 实现规则识别

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在开发中我们经常遇到“模式匹配”的问题&#xff0c;比如日志分类、用户意图识别、甚至是在一些权限系统中做规则映射判断。这类问题的本质是判断两个结构是否具有一致的对应关系。LeetCo…

前端js获取当前经纬度(H5/pc/mac/window都可用)

前端JS获取当前位置的经纬度&#xff08;H5/PC/mac/window都可用&#xff0c;亲测&#xff01;&#xff09;&#xff0c;效果如下。 完整代码如下&#xff1a; <!-- 用原生api获取经纬度&#xff0c;转化为百度经纬度与服务端交互&#xff0c; 只支持https&#xff01; --&g…

Meta计划借助AI实现广告创作全自动化

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

AI编程规范失控?三大策略用Cursor Rules精准约束

​在 AI 编程时代,如何让助手精准理解您的项目规范?当团队协作时,如何确保每位开发者生成的代码风格统一?Cursor Rules 正是您需要的终极解决方案——它如同一位永不疲倦的架构师,通过预设规则控制 AI 的每一次代码生成、重构与补全行为。 本教程将带您深入 Cursor Rules…

4.大语言模型预备数学知识

大语言模型预备数学知识 复习一下在大语言模型中用到的矩阵和向量的运算&#xff0c;及概率统计和神经网络中常用概念。 矩阵的运算 矩阵 矩阵加减法 条件&#xff1a;行数列数相同的矩阵才能做矩阵加减法 数值与矩阵的乘除法 矩阵乘法 条件&#xff1a;矩阵A的列数 矩阵…

免费开源Umi-OCR,离线使用,批量精准!

Umi-OCR&#xff08;Windows端&#xff09; Umi-OCR 是一款在 GitHub 上开源的免费 OCR 识别软件&#xff0c;它最大的亮点就是免费、开源、支持批量处理&#xff0c;而且识别准确度很高。这款软件不需要联网就能用&#xff0c;非常值得推荐&#xff01; 在 OCR 识别功能方面&…