惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
Martin Fowler
Martin Fowler
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
Engineering at Meta
Engineering at Meta
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
罗磊的独立博客
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX

qlAD 的技术笔记

2026 年 6 月 7 日 -- 我有社交恐惧症,恐惧外面到处雷电风雨声(大学生活记录) 手把手带你实现哈希表(C/C++ 数据结构) 手把手带你实现图结构(C/C++ 数据结构) 手把手带你实现二叉树(C/C++ 数据结构) 手把手带你实现栈和队列(C/C++ 数据结构) 手把手带你实现单/双链表(C/C++ 数据结构) 手把手带你实现动态数组(C/C++ 数据结构) 2026 年 1 月 2 日 -- 我不怕冷,因为我内心炽热 【2025 年度总结】(大学生活记录) 2025 年 12 月 2 日 -- 省电模式:大一 100 天耗电日志(大学生活记录) 蓝桥杯备赛第一期 —— 枚举与模拟 2025 年 11 月 3 日 -- 用爱发电、大爱无私(大学生活记录) 使用循环嵌套输出规则图形找规律讲解(嵌套循环-图形输出) 2025 年 10 月 1 日 -- 二字开头第一年的生日记录及感悟随笔(大学生活记录) Python 初级 04 -- 目前为止 Python 中你们做题可能会遇到的问题以及七七八八 2025 年 9 月 24 日 -- 开学后的第一课及军训汇演(大学生活记录) Python 初级 03 -- 程序设计的三种结构之选择结构和循环结构 Python 初级 02 -- 基础的数据类型和输入输出 2025 年 9 月 17 日 -- 大连 2025 国际大体联足球世界杯(大学生活记录) Python 初级 01 -- 初识编程、理解计算机语言及程序运行方式 适合大一新生学习编程的前一课 -- 编程先导(编程的本质) 2025 年 9 月 12 日 -- 三天军训感受以及一些七七八八(大学生活记录) 2025 年 9 月 9 日 -- 体检、军训前的准备(大学生活记录) 适合大一新生的计算机基础知识 -- 个人认为足够版 2025 年 9 月 7 日 -- 既来之、则安之(大学生活记录) C++ 程序的内存布局 —— 代码区、全局/静态区、栈区和堆区 联想小新 pro 16 2025 开箱记录:跳过联网、office 激活、更换 win 11 专业版 R 语言中的数学函数 计算机软件著作权申请过程记录 从聚类到回归:用 Python 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式
如何使用 use-sound 为 React 应用添加声音效果
qlAD · 2024-11-11 · via qlAD 的技术笔记

cover

在现代 Web 应用中,用户体验 (UX) 是一个至关重要的部分。

张洪 @zhHeo 曾在一篇文章中提到:“如果你期望提升用户浏览时长,可以在交互上拖延时间,但不要在性能上打折扣。”——查看原文

在界面设计中,我们经常会通过视觉效果来吸引用户的注意力。但是时间久了,当人们面对眼花缭乱的效果难免会出现 审美疲劳,那如果这时候来点音效可能是个不错的选择。音效不仅可以为应用增加趣味性,还能提供用户多感官交互的即时反馈。

例如,当你点击此网站的一些按钮、打开某个菜单或完成某个任务时,耳边传来一声清脆的提示音,这种反馈我觉得让用户的操作更有存在感和仪式感,从而让应用变得更加令人愉悦和难忘。

use-sound 是一个简单且功能强大的 React Hook,用于在 React 应用中快速添加音效。它基于浏览器的 Audio API,提供了高度抽象的接口,使得开发者可以轻松地为按钮、导航、通知等元素添加声音。


安装 use-sound

在使用 use-sound 之前,首先需要将其安装到你的项目中。打开终端,并在你的 React 项目目录下运行以下命令:

npm install use-sound
# 或者使用 yarn
yarn add use-sound

快速上手

use-sound 的使用非常简单。假设我们有一个按钮,点击时希望播放一个音效。我们可以按照以下步骤来实现:

1. 准备音效文件

确保你有一段短促的 .mp3.wav 文件,比如 click.mp3。将它放在你的项目文件夹下,例如 public/sounds/click.mp3

2. 使用 use-sound

创建一个简单的按钮组件,当用户点击时播放音效:

import useSound from "use-sound";
import clickSound from "/sounds/click.mp3";

function BoopButton() {
  const [play] = useSound(clickSound);

  return <button onClick={play}>点击我</button>;
}

export default BoopButton;

3. 运行你的 React 应用

现在,当用户点击按钮时,会播放 click.mp3 的音效。是不是很简单?


高级用法

use-sound 不仅仅可以简单地播放声音,它还提供了丰富的配置选项,让你可以更灵活地控制音效行为。

1. 控制音量

如果你想调整音量,可以通过 volume 参数进行设置。音量值的范围是 01

const [play] = useSound(clickSound, { volume: 0.5 });

2. 循环播放

如果你希望声音可以循环播放,比如背景音乐,可以使用 loop 参数:

const [play, { stop }] = useSound("/sounds/background.mp3", { loop: true });

// 开始播放
play();

// 需要时可以手动停止
stop();

3. 播放不同的声音

你还可以使用多个声音源,例如在打开和关闭菜单时播放不同的声音:

import useSound from "use-sound";
import openSound from "/sounds/open.mp3";
import closeSound from "/sounds/close.mp3";

function ToggleMenu() {
  const [playOpen] = useSound(openSound);
  const [playClose] = useSound(closeSound);
  const [isOpen, setIsOpen] = useState(false);

  const toggleMenu = () => {
    if (isOpen) {
      playClose();
    } else {
      playOpen();
    }
    setIsOpen(!isOpen);
  };

  return (
    <button onClick={toggleMenu}>{isOpen ? "关闭菜单" : "打开菜单"}</button>
  );
}

参考资料