HTML audio 标签无法通过属性设置起始时间,必须用 JavaScript 在 loadedmetadata 事件中设置 currentTime(单位秒,支持小数),并配合 autoplay+muted 和显式 play() 调用;URL fragment(如#t=62)可辅助跳转,但同样需等待元数据加载;移动端需用户手势触发才可靠。

用 currentTime 设置音频起始播放位置
HTML 原生 <audio></audio> 标签本身不支持直接通过属性指定开始时间(比如没有 start="30" 这种写法),必须靠 JavaScript 控制 currentTime 属性。这个属性单位是秒,可以是小数,比如 30.5 表示 30 秒 500 毫秒。
常见错误是把 currentTime 写在 src 后面就以为生效了——其实音频还没加载完,此时设置会被忽略。必须等 loadedmetadata 或 canplay 事件触发后再赋值才可靠。
- 推荐监听
loadedmetadata:它表示元数据(时长、尺寸等)已加载完成,此时duration可读,currentTime可安全设置 - 如果音频文件很小或已缓存,
canplay也可用,但不如loadedmetadata稳定 - 不要在
DOMContentLoaded或load事件里直接设,容易因加载时机错过
autoplay 和 currentTime 要一起配着用
用户主动交互前,现代浏览器禁止自动播放带声音的媒体。即使设置了 currentTime,若没加 autoplay(且没静音),页面一打开音频也不会动。但光加 autoplay 不够——它默认从 0 开始播。
所以典型做法是:HTML 中写 autoplay + muted(绕过静音限制),再用 JS 设置 currentTime,最后显式调用 play()(部分浏览器需要):
<audio id="my-audio" src="song.mp3" autoplay muted></audio><script>
const audio = document.getElementById('my-audio');
audio.addEventListener('loadedmetadata', () => {
audio.currentTime = 45.2; // 从第 45.2 秒开始
});
// 部分 Chrome 版本要求显式 play() 才能真正启动
audio.addEventListener('canplay', () => {
audio.play().catch(e => console.warn('Autoplay prevented:', e));
});
</script>
用 URL 参数模拟“跳转播放”(适合简单场景)
如果你只是想让某个链接点开就从特定时间开始播,又不想写 JS,可以用一个取巧办法:把时间戳作为 URL fragment(#后面),然后页面 onload 时解析并跳转。例如访问 player.html#t=62 就从 62 秒开始。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
注意点:
- fragment 不会发给服务器,纯前端解析,用
window.location.hash - 要手动提取
t=62中的数字,建议用正则/t=(\d+\.?\d*)/ - 仍需等待
loadedmetadata,不能一拿到 hash 就设currentTime - 不适用于需要精确到毫秒或动态生成链接的复杂逻辑
移动端和 Safari 的特别注意事项
iOS Safari 和 Android Chrome 对自动播放限制更严。即使加了 muted,某些版本仍可能拒绝 autoplay,导致 currentTime 设置后音频处于暂停状态。
稳妥做法是:保留播放按钮,点击时再设置时间并调用 play()。这样 100% 触发用户手势上下文:
<button onclick="playFrom(120)">从 2 分钟开始</button>
<audio id="my-audio" src="podcast.mp3"></audio><script>
function playFrom(seconds) {
const audio = document.getElementById('my-audio');
audio.currentTime = seconds;
audio.play().catch(e => console.error('Play failed:', e));
}
</script>
真正难处理的是“既要自动播、又要跳时间、还要跨平台稳定”,这时候就得接受:没有零配置的银弹,currentTime 必须配合生命周期事件,而自动播放必须妥协于平台策略。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










