50天50個小項目 (Vue3 + Tailwindcss V4) ? | Sound Board(音響控制面板)

📅 我們繼續 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;扮演著至關重要的角色。它能夠實時收集、分析和處…