下面给你一份 《JavaScript Audio 对象知识点整理(最全最清晰)》,涵盖基础用法、属性方法、事件、实战技巧,非常适合做笔记或写教程。
🎵 JavaScript Audio 对象知识点整理(Audio API 全面总结)
JavaScript 中播放音频通常有两种方式:
- 使用 HTML
<audio>标签 - 使用 JavaScript 的
Audio对象(HTMLAudioElement)
你可以理解为:
new Audio() = 创建一个 元素
⭐ 1. Audio 对象的创建方式
✔ 方式一:直接 new Audio()
const audio = new Audio('music.mp3');
audio.play();
✔ 方式二:通过 DOM 获取
<audio id="bg" src="music.mp3"></audio>
const audio = document.getElementById('bg');
audio.play();
两者最终都得到同一个类型:HTMLAudioElement
⭐ 2. 常用属性(必须掌握)
| 属性 | 说明 |
|---|---|
src | 音频路径 |
currentTime | 当前播放时间(秒) |
duration | 音频总时长(秒) |
paused | 是否暂停状态(只读) |
loop | 是否循环播放 |
volume | 音量(0~1) |
muted | 是否静音 |
autoplay | 是否自动播放 |
controls | 是否显示原生控件 |
playbackRate | 播放速度 |
ended | 是否播放结束(只读) |
常用示例
audio.volume = 0.5;
audio.currentTime = 10;
audio.loop = true;
audio.playbackRate = 1.25;
⭐ 3. 常用方法(操作音频)
| 方法 | 说明 |
|---|---|
play() | 播放(Promise) |
pause() | 暂停 |
load() | 重新加载音频 |
canPlayType(type) | 是否支持该格式 |
示例:
audio.play();
audio.pause();
audio.currentTime = 0; // 重新开始
⭐ 4. Audio 的常用事件(非常重要)
| 事件名 | 触发时机 |
|---|---|
play | 调用了 play() |
pause | 调用了 pause() |
ended | 播放结束 |
timeupdate | 播放进度改变 |
loadeddata | 媒体资源加载完成 |
error | 播放错误 |
canplay | 可以开始播放 |
progress | 加载数据中 |
示例:
audio.addEventListener('timeupdate', () => {
console.log(audio.currentTime);
});
audio.addEventListener('ended', () => {
console.log('播放结束');
});
⭐ 5. Audio 进阶使用技巧(实战重点)
✔ 1)浏览器默认禁止自动播放(Autoplay Policy)
如果你这样写:
audio.play();
浏览器可能会报错:
Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the document first.
应对方法:
✔ 让用户先点击
✔ 或设置为静音 autoPlay(视频常用)
audio.muted = true;
audio.play();
✔ 2)实时展示播放进度
audio.addEventListener('timeupdate', () => {
progress.value = audio.currentTime / audio.duration * 100;
});
✔ 3)播放完成后重新开始
audio.addEventListener('ended', () => {
audio.currentTime = 0;
audio.play();
});
或直接:
audio.loop = true;
✔ 4)改变播放速度
audio.playbackRate = 2; // 2倍速
✔ 5)预加载控制
<audio preload="none"></audio>
preload 可选值:
| 值 | 含义 |
|---|---|
| none | 不预加载 |
| metadata | 只加载元数据(时长等) |
| auto | 尽量自动加载 |
⭐ 6. Audio 对象 vs Web Audio API(面试常问)
| 对比项 | Audio 对象 | Web Audio API |
|---|---|---|
| 用途 | 简单播放 | 专业音频处理 |
| 控制粒度 | 低 | 高(混音、滤波器、频谱分析) |
| 使用难度 | 简单 | 复杂 |
| 是否能做可视化 | ❌ | ✔(频谱、音效) |
⭐ 7. 常见实战代码片段合集
✔ 切换播放/暂停按钮
if (audio.paused) {
audio.play();
} else {
audio.pause();
}
✔ 判断浏览器支持哪种音频格式
audio.canPlayType('audio/mp3'); // maybe / probably / ""
audio.canPlayType('audio/ogg');
✔ 音量渐变(淡入淡出)
let vol = 0;
audio.volume = 0;
audio.play();
const timer = setInterval(() => {
if (vol < 1) {
vol += 0.1;
audio.volume = vol;
} else {
clearInterval(timer);
}
}, 100);
🎯 8. Audio 知识点大总结(30 秒背诵版本)
Audio对象是HTMLAudioElement,本质是<audio>标签。
主要属性有 src、currentTime、duration、volume、loop、muted。
常用方法为 play()、pause()、load()。
常用事件包括 timeupdate、ended、play、pause、loadeddata。
浏览器有自动播放限制,需要用户交互。
Audio 适合简单播放,复杂音频处理使用 Web Audio API。