HTML Video 元素在 Vue 中消失的 muted 属性

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

在使用 Nuxt 框架开发英文产品展示官网时,遇到视频自动播放的问题。视频元素的 `muted` 属性在路由切换后消失,导致自动播放失效。尝试了多种解决方案,包括动态绑定和路由缓存,但未能解决。最终通过操作 DOM 触发视频播放事件实现了自动播放。

🔎

延伸解读

问题复现与影响范围

文章描述在 Nuxt 项目中,首页全屏 video 元素在路由切换后 muted 属性消失,导致自动播放失效。作者测试了 navigateTo()、$router.push() 和 keepalive 缓存,均未解决。在纯 Vue 项目中也出现 muted 属性丢失,但视频仍能自动播放,说明问题可能与 Vue 对属性的处理有关,而非单纯 Nuxt 路由问题。

临时解决方案的局限

作者最终通过 onMounted 钩子获取所有 video 元素并调用 play() 方法,强制触发播放,从而在路由切换后恢复自动播放。这种方法虽然有效,但属于操作 DOM 的兜底方案,并未修复 muted 属性丢失的根本原因,可能在其他场景下仍存在隐患,且增加了代码的维护成本。

框架层面的潜在问题

文章提到 Vue 的 GitHub 仓库中存在一个 2022 年创建且未关闭的 issue,有回复指出「Vue 不应该真的破坏原生浏览器功能」。这表明 muted 属性丢失可能是 Vue 在编译或更新 DOM 时的行为导致的,而非浏览器本身的问题。作者认为问题核心可能出在框架设计上,值得进一步研究。

❓

Q&A

在使用 Nuxt 框架时,视频元素的 muted 属性消失的原因是什么?

视频元素的 muted 属性在路由切换后消失,导致自动播放失效,可能是框架设计的问题。

如何解决 Nuxt 中视频自动播放的问题?

通过操作 DOM 触发视频播放事件来解决自动播放问题。

在开发中遇到的其他解决方案有哪些?

尝试了动态绑定 muted 属性和设置路由缓存,但均未能解决问题。

使用 Vue 时,视频元素的 muted 属性是否会影响自动播放?

是的,muted 属性的缺失会导致视频无法自动播放。

在 Nuxt 中使用动态绑定 muted 属性有什么问题?

动态绑定 muted 属性未能解决问题,可能是框架的 Bug。

是否有其他人遇到类似的 Vue 视频播放问题?

是的,在 Vue 的 GitHub 仓库中发现了类似的问题,至今未解决。

🏷️

标签

➡️

继续阅读