📅 我们继续 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> 元素 --><divclass="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.pswp.cn/bicheng/83432.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/83432.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/83432.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu20.04上安装ROS Noetic

本章教程,主要记录在Ubuntu20.04上安装ROS Noetic。 一、添加软件源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list二、设置秘钥 …

神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)

&#x1f9e0; 神经网络基础&#xff1a;从单个神经元到多层网络&#xff08;superior哥AI系列第3期&#xff09; 哈喽&#xff01;各位AI探索者们&#xff01;&#x1f44b; 上期我们把数学"怪兽"给驯服了&#xff0c;是不是感觉还挺轻松的&#xff1f;今天我们要进…

03 APP 自动化-定位元素工具元素定位

文章目录 一、Appium常用元素定位工具1、U IAutomator View Android SDK 自带的定位工具2、Appium Desktop Inspector3、Weditor安装&#xff1a;Weditor工具的使用 4、uiautodev通过定位工具获取app页面元素有哪些属性 二、app 元素定位方法 一、Appium常用元素定位工具 1、U…

Java消息队列与安全实战:谢飞机的烧饼摊故事

Java消息队列与安全实战&#xff1a;谢飞机的烧饼摊故事 第一轮&#xff1a;消息队列与缓存 面试官&#xff1a;谢飞机&#xff0c;Kafka和RabbitMQ在电商场景如何选型&#xff1f; 谢飞机&#xff1a;&#xff08;摸出烧饼&#xff09;Kafka适合订单日志处理&#xff0c;像…

Unity中的MonoSingleton<T>与Singleton<T>

1.MonoSingleton 代码部分 using UnityEngine;/// <summary> /// MonoBehaviour单例基类 /// 需要挂载到GameObject上使用 /// </summary> public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> {private static T _instance;…

day 40 python打卡

仔细学习下测试和训练代码的逻辑&#xff0c;这是基础&#xff0c;这个代码框架后续会一直沿用&#xff0c;后续的重点慢慢就是转向模型定义阶段了。 # 先继续之前的代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataL…

进阶日记(一)大模型的本地部署与运行

目录 一、背景知识 为什么要在本地部署大模型&#xff1f; 在本地部署大模型需要做哪些准备工作&#xff1f; &#xff08;1&#xff09;硬件配置 &#xff08;2&#xff09;软件环境 有哪些部署工具可供选择&#xff1f; 二、Ollma安装 Ollama安装完之后&#xff0c;还…

Spring Boot Starter 自动装配原理全解析:从概念到实践

Spring Boot Starter 自动装配原理全解析&#xff1a;从概念到实践 在Spring Boot开发中&#xff0c;Starter和自动装配是两个核心概念&#xff0c;它们共同构成了“开箱即用”的开发体验。通过引入一个Starter依赖&#xff0c;开发者可以快速集成第三方组件&#xff08;如Red…

win11回收站中出现:查看回收站中是否有以下项: WPS云盘回收站

好久没更新了&#xff0c;首先祝所有大朋友、小朋友六一儿童节快乐&#xff0c;真的希望我们永远都不会长大呀&#xff0c;长大真的好累呀(•_•) 免责声明 笔者先来个免责声明吧&#xff0c;被网上的阴暗面吓到了 若读者参照笔者的这篇文章所执行的操作中途或后续出现的任何…

网络安全大模型理解

一、网络安全大模型的概述 网络安全大模型是一种用于识别和应对各种网络安全威胁的模型。它通过分析网络数据包、网络行为等信息&#xff0c;识别潜在的网络安全事件&#xff0c;并采取相应的措施进行防御。网络安全大模型主要包括以下几个部分&#xff1a; 1. 数据预处理&am…

C++语法架构解说

C 是一种功能强大且灵活的编程语言&#xff0c;广泛应用于系统编程、游戏开发、嵌入式系统、金融软件等领域。 其语法架构复杂且丰富&#xff0c;涵盖了从基础语法到高级特性的各个方面。 对 C 语法架构 的详细解析&#xff0c;涵盖其核心语法结构、面向对象编程&#xff08;…

审计- 1- 审计概述

1.财务报表审计的概念 财务报表审计是指注册会计师对财务报表是否不存在重大错报提供合理保证&#xff0c;以积极方式提出意见&#xff0c;增强除管理层之外的预期使用者对财务报表信赖的程度。 1.1 审计业务三方关系人 注册会计师对财务报表发表审计意见是注册会计师的责任管…

RapidOCR集成PP-OCRv5_det mobile模型记录

该文章主要摘取记录RapidOCR集成PP-OCRv5_mobile_det记录&#xff0c;涉及模型转换&#xff0c;模型精度测试等步骤。原文请前往官方博客&#xff1a; https://rapidai.github.io/RapidOCRDocs/main/blog/2025/05/26/rapidocr%E9%9B%86%E6%88%90pp-ocrv5_det%E6%A8%A1%E5%9E%8B…

Spine工具入门教程2之导入

1、导入定义 从原画转化为Spine的环节。 &#xff08;1&#xff09;选择路径&#xff0c;拖动图片导入方式 缺点&#xff1a;定位不准 【使用批量导出的方式】 在PS工具中&#xff0c;选择所有图层后右键选择导出。 在Spine工具中&#xff0c;选择路径导入图片。 然后再拖…

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡 一、项目背景与转型原因 1.1 原定计划的变更 本系列教程最初规划是开发即构美颜SDK的UTS插件&#xff0c;但由于甲方公司内部战略调整&#xff0c;原项目被迫中止。考虑到&#xff1a; 技术…

戴尔AI服务器订单激增至121亿美元,但传统业务承压

戴尔科技121亿美元的AI服务器订单&#xff0c;不仅超过了公司整个2025财年的AI服务器出货量&#xff0c;更让其AI订单积压达到144亿美元的历史高位。 戴尔科技最新财报显示&#xff0c;AI服务器需求的爆炸式增长正在重塑这家老牌PC制造商的业务格局&#xff0c;但同时也暴露出…

多线程和并发之线程

线程 前面讲到进程&#xff1a;为了并发执行任务&#xff08;程序&#xff09;&#xff0c;现代操作系统才引进进程的概念 分析&#xff1a; 创建开销问题&#xff1a;创建一个进程开销&#xff1a;大 子进程需要拷贝父进程的整个地址空间 通信开销问题&#xff1a;进程间的通…

AAAI 2025论文分享│STD-PLM:基于预训练语言模型的时空数据预测与补全方法

本文详细介绍了一篇发表于人工智能顶级会议AAAI 2025的论文《STD-PLM: Understanding Both Spatial and Temporal Properties of Spatial-Temporal Data with PLM》。该论文提出了一种基于预训练语言模型&#xff08;Pre-trained Language Model‌&#xff0c;PLM&#xff09;的…

前端八股 tcp 和 udp

都是传输层协议 udp 数据报协议 不可靠面向数据包对于应用层传递的报文加上UDP首部就传给网络层 tcp 传输控制协议 可靠 会将报文分段进行传输 区别&#xff1a; 1.tcp 可靠 udp 不可靠 2.tcp 面向连接 三握四挥 udp 无连接 3.tcp面向字节流 udp面向报文 4.效率低 效率高…

MES管理系统:Java+Vue,含源码与文档,实现生产过程实时监控、调度与优化,提升制造企业效能

前言&#xff1a; 在当今竞争激烈的制造业环境中&#xff0c;企业面临着提高生产效率、降低成本、提升产品质量以及快速响应市场变化等多重挑战。MES管理系统作为连接企业上层计划管理系统与底层工业控制之间的桥梁&#xff0c;扮演着至关重要的角色。它能够实时收集、分析和处…