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

推荐订阅源

T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Securelist
K
Kaspersky official blog
V
Vulnerabilities – Threatpost
C
Cisco Blogs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
Forbes - Security
Forbes - Security
Spread Privacy
Spread Privacy
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Palo Alto Networks Blog
H
Hacker News: Front Page
L
Lohrmann on Cybersecurity
Cloudbric
Cloudbric
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
I
InfoQ
人人都是产品经理
人人都是产品经理
PCI Perspectives
PCI Perspectives
月光博客
月光博客
爱范儿
爱范儿
Jina AI
Jina AI
WordPress大学
WordPress大学
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
Google Online Security Blog
Google Online Security Blog
W
WeLiveSecurity
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
博客园 - 司徒正美
Scott Helme
Scott Helme
AI
AI
L
LangChain Blog
A
Arctic Wolf
博客园 - 【当耐特】
量子位
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
腾讯CDC
博客园 - 叶小钗
Last Week in AI
Last Week in AI
S
Secure Thoughts

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 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式 高中化学物质反应规则表 —— 方程式之间也有规律可循 集合元素性质、关系、子集公式、基本运算 —— 一篇文章带你全方面死磕集合 如何为你的项目选择合适的许可证 -- 全方位指南 解释 3:1 和 9:3:3:1 的详细来源 —— 建立减数分裂与孟德尔遗传学定律之间的联系 重新设置磁盘分区以及 Btrfs 子卷(subvolume)布局的无损方案 零基础实战:用 Docker 启动 dockermailserver 绕过 25 端口封锁搭建个人邮箱服务器 基于 GitHub Actions + OSS 的自托管 APT 仓库全面指南 如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南 一个合格的个人网站站长应该知道哪些事? CSS 基础入门教程 —— 选择器、样式声明 HTML 基础入门 —— 基本结构和语法 给博客添加一个文章数据统计的页面 Git 学习笔记(命令备忘表) Anki 牌组选项详细解释与设置 手动编译带有 KernelSU 的 OnePlus 6 内核 安卓类原生系统补全计划 —— PixelExperience(一加 OnePlus) 标准化项目的 GitHub Flow 工作流 如何搭建设计自己的博客网站? 使用安知鱼主题同款的 Twikoo 评论组件 配置 GitHub Actions 实现自动化提交百度收录 第00期 | 环境搭建 & 递归 (一) | 基本数列递归 逐字符讲解 C 语言 HelloWorld 程序 2023 年回顾 🤟 Anki:记忆神器,助你高效学习 Gentoo 学习笔记 美化你的 PixelExperience OS Markdown 语法指南 搭建 OneDrive 目录索引 为什么用 65 表示大写字母 A
如何使用 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>
  );
}

参考资料