video.volume 是唯一能直接控制 html 视频音量的原生属性,必须用 javascript 设置(如 videoelement.volume = 0.5),因 html 标签不支持 volume 属性;muted 是唯一可写在标签里的音量相关属性,等价于静音且禁用手动调节。

video.volume 是唯一能直接控制 HTML 视频音量的原生属性,但它不能写在 HTML 标签里,必须用 JavaScript 设置。
为什么直接写 volume="0.5" 没用?
HTML 的 <video></video> 标签不支持 volume 作为 HTML 属性。浏览器会忽略它,就像写 <video volume="0.5"></video> 一样毫无效果。
- 合法写法只有
videoElement.volume = 0.5(JavaScript 赋值) -
muted是唯一可写在标签里的音量相关属性,它等价于volume = 0且禁用用户手动调高音量 - 如果想默认静音,用
<video muted></video>;如果想默认 30% 音量,必须靠 JS
volume 的取值范围和常见错误
volume 只接受 0.0 到 1.0 之间的数字,超出范围会被自动截断或报错(部分浏览器静默处理)。
-
video.volume = 1.2→ 实际变成1.0 -
video.volume = -0.1→ 实际变成0.0 -
video.volume = "0.5"→ 字符串会被转成数字,但容易出错,应始终用数字字面量 - 设置后立即读取
video.volume可能还是旧值,尤其在未加载元数据时(见下一条)
什么时候设置 volume 才真正生效?
必须等视频元数据加载完成(loadedmetadata 事件),否则部分浏览器会重置或忽略你的设置。
- 错误写法:
video.volume = 0.3放在DOMContentLoaded里,但视频还没加载元数据 - 正确写法:监听
loadedmetadata后再赋值,例如:video.addEventListener('loadedmetadata', () => { video.volume = 0.3; }); - 如果视频已播放过,
volume值通常保留;但页面刷新后,所有设置都会丢失,除非你配合 localStorage 或 URL 参数持久化
真正麻烦的是移动端——iOS Safari 和部分 Android 浏览器会强制覆盖初始音量,哪怕你设置了 volume,也可能被系统策略压回 0,除非用户主动交互(比如点击播放)后才允许调高。这点没法绕过,只能做好 UI 提示。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











