HTML5 Audio(音频)

HTML5 的 <audio> 标签让网页无需插件即可播放声音,与 <video> 用法几乎一致,非常适合做背景音乐、语音消息、播客等场景。学完 Video 再学 Audio 会非常轻松。

最简单的用法

<audio> 加上 srccontrols 就能显示一个音频播放条,标签内的文字是浏览器不支持时的提示。

<audio src="song.mp3" controls>
    您的浏览器不支持 audio 标签。
</audio>

在浏览器中显示为:一条带播放/暂停、进度、音量的音频控制条。

多格式兼容:source 子标签

浏览器对音频格式的支持不完全相同:Chrome/Edge/Firefox 都支持 MP3、WAV,Ogg 主要服务于 Firefox/Chrome 老版本。放多个 <source> 让浏览器自动挑选第一个能播的。

<audio controls>
    <source src="song.mp3" type="audio/mpeg">
    <source src="song.ogg" type="audio/ogg">
    您的浏览器不支持 audio 标签。
</audio>

常用属性

属性作用
controls显示播放控件
autoplay自动播放
muted静音播放
loop循环播放
preload预加载策略:auto/metadata/none

与视频相同,浏览器会拦截带声音的自动播放,autoplay 通常要配 muted 才能生效,且不建议滥用自动播放。

JavaScript 控制音频

<audio> 同样暴露 DOM 接口:play()pause() 控制播放,pausedended 判断状态,currentTime 跳转秒数,volume 设音量,duration 取总时长。

<audio id="au" src="song.mp3" preload="metadata"></audio>
<button onclick="playMusic()">播放</button>
<button onclick="stopMusic()">暂停</button>
<script>
function playMusic() {
    var a = document.getElementById("au");
    a.play();                      // 开始播放
    console.log("总时长(秒):" + a.duration);
}
function stopMusic() {
    document.getElementById("au").pause();
}
</script>

在浏览器中显示为:点击"播放"开始放歌,控制台打印出音频总时长;点"暂停"声音停止。

音频事件与易错点

常用事件有 play(开始播放)、pause(暂停)、ended(播放结束)、timeupdate(播放位置更新,可用来做进度条)和 canplay(可以播放了)。

易错点:① duration 在加载完成前是 NaN,要等 loadedmetadata 事件后再读;② 不同来源的音频可能触发跨域限制(CORS);③ autoplay 一律要先 muted;④ 别忘记给有意义的音频加控制按钮,照顾可访问性。

小结:<audio> + <source> 负责跨浏览器播放声音,play()/pause()/volume/currentTime 负责程序化控制,事件则用来做进度条等交互。

笔记加载中…