HTML Video 元素在 Vue 中消失的 muted 属性
zhezhongyun 2025-03-30 23:11 18 浏览
公司有个新项目由我这边独立选型开发,项目需求是做一个英文的产品展示官网,考虑到项目比较简单且周期不长,最终决定使用 Nuxt 框架来进行开发。
开发过程还算顺利,但中途遇到一个 Bug 花了我不少的时间,在网上找了许久,仅能检索到极少数相关内容,都是在 Vue 的 Github 仓库中的 issues,且最终仍未能够找到问题所在,当然这也许并不是 Bug,而是框架本身设计的就是这样。
以下是我的解决思路,如果各位大佬有别的见解,请指出交流。
问题现象
在产品展示的官网首页有一个全屏的 video 元素,视频默认自动播放,在大多数现代化浏览器的最新版本中,要实现这个功能,需要在 video 元素中加入 autoplay 属性,且还需要设置一个 muted 属性用于默认静音播放。
可以看到在第一次页面加载时是正常自动播放的,且此时 DOM 结构跟在 Vue 模板里写的代码是一样的。
这时候切换一下路由到产品页面,再切回首页时就出现了问题,原来 video 元素中的 muted 莫名其妙的消失了,导致视频自动播放也随之失效。
问题分析
起初我以为是 Nuxt 路由切换的问题,测试了使用 Nuxt 提供的 navigateTo() 方法和 Vue 路由提供的 $router.push() 方法,均存在该问题。
第二次测试了给页面设置 keepalive: true 来实现路由缓存,但仍未解决该问题,且因此引出了其他的 Bug,没往其深究所以暂且按下不表。
第三次测试了给 video 元素通过 v-bind 去动态绑定 muted 属性,不管是通过 ref 定义的值还是直接绑定 :muted="true",均未能解决问题。
我开始怀疑是不是 Nuxt 的问题,于是我第四次使用另一个纯 Vue 的项目做了测试。得出结果首次加载就失去了 muted 属性,但诡异的是视频仍可以实现自动播放,这个奇怪的问题逐渐变得扑朔迷离。
最终在 Vue 的 Github 仓库中找到了一个还未解决的 issues,遇到了跟我一样的问题。
这是一个在 2022 年 10 月 12 日创建的 issues,至今为止仍未关闭。值得一提的是,底下有一条回复指出「Vue 不应该真的破坏原生浏览器功能」,但可能这确实是 Vue.js 的 Bug。
问题解决
最终我不再去纠结问题所在,开始着手准备解决方案。既然通过动态绑定属性不能解决问题,那就只能使用最原始的方案了,通过操作 DOM 去出发元素的播放事件。
在 Vue 挂载完成之后,通过
document.getElementsByTagName('video') 去拿到首页的所有视频元素,再依次触发播放事件,如此就能够在切换路由再切回首页时,视频仍能够保持自动播放。
尽管如此可以简单的解决问题,但感觉这并不是最终的解决方案,其问题核心应该还是出现在框架上,希望能够有大佬能深入研究一下,也能给我指点一二。
相关推荐
- 激光手术矫正视力对眼睛到底有没有伤害?
-
因为大家询问到很多关于“基质不能完全愈合”的问题,有必要在这里再详细解释一下。谢谢@珍惜年少时光提出的疑问:因为手头刚好在看组织学,其中提到:”角膜基质约占角膜的全厚度的90%,主要成分是胶原板层,...
- OneCode核心概念解析——View(视图)
-
什么是视图?在前面的章节中介绍过,Page相关的概念,Page是用户交互的入口,具有Url唯一性。但Page还只是一个抽象的容器,而View则是一个具备了具体业务能力的特殊的Page,它可以是一个...
- 精品博文图文详解Xilinx ISE14.7 安装教程
-
在软件安装之前,得准备好软件安装包,可从Xilinx官网上下载:http://china.xilinx.com/support/download/index.html/content/xilinx/z...
- 卡片项目管理(Web)(卡片设计的流程)
-
简洁的HTML文档卡片管理,简单框架个人本地离线使用。将个人工具类的文档整理使用。优化方向:添加图片、瀑布式布局、颜色修改、毛玻璃效果等。<!DOCTYPEhtml><html...
- GolangWeb框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
-
前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Tok...
- sitemap 网站地图是什么格式?有什么好处?
-
sitemap网站地图方便搜索引擎发现和爬取网页站点地图是一种xml文件,或者是txt,是将网站的所有网址列在这个文件中,为了方便搜索引擎发现并收录的。sitemap网站地图分两种:用于用户导...
- 如何在HarmonyOS NEXT中处理页面间的数据传递?
-
大家好,前两天的Mate70的发布,让人热血沸腾啊,不想错过,自学的小伙伴一起啊,今天分享的学习笔记是关于页面间数据伟递的问题,在HarmonyOSNEXT5.0中,页面间的数据传递可以有很多种...
- 从 Element UI 源码的构建流程来看前端 UI 库设计
-
作者:前端森林转发链接:https://mp.weixin.qq.com/s/ziDMLDJcvx07aM6xoEyWHQ引言由于业务需要,近期团队要搞一套自己的UI组件库,框架方面还是Vue。而业界...
- jq+ajax+bootstrap改了一个动态分页的表格
-
最近在维护一个很古老的项目,里面是用jq的dataTable方法实现一个分页的表格,不过这些表格的分页是本地分页。现在想要的是点击分页去请求数据。经过多次的修改,以失败告终。分页的不准确,还会有这个错...
- 学习ES6- 入门Vue(大量源代码及笔记,带你起飞)
-
ES6学习网站:https://es6.ruanyifeng.com/箭头函数普通函数//普通函数this指向调用时所在的对象(可变)letfn=functionfn(a,b){...
- 青锋微服务架构之-Ant Design Pro 基本配置
-
青锋(msxy)-Gitee.com1、更换AntDesignPro的logo和名称需要修改文件所在位置:/config/defaultSetting.jsconstproSett...
- 大数据调度服务监控平台(大数据调度服务监控平台官网)
-
简介SmartKettle是针对上述企业的痛点,对kettle的使用做了一些包装、优化,使其在web端也能具备基础的kettle作业、转换的配置、调度、监控,能在很大一定程度上协助企业完成不同...
- Flask博客实战 - 实现博客首页视图及样式
-
本套教程是一个Flask实战类教程,html/css/javascript等相关技术栈不会过多的去详细解释,那么就需要各位初学者尽可能的先去掌握这些基础知识,当然本套教程不需要你对其非常精通,但最起码...
- Web自动化测试:模拟鼠标操作(ActionChains)
-
在日常的测试中,经常会遇到需要鼠标去操作的一些事情,比如说悬浮菜单、拖动验证码等,这一节我们来学习如何使用webdriver模拟鼠标的操作首页模拟鼠标的操作要首先引入ActionChains的包fro...
- DCS F-16C 中文指南 16.9ILS仪表降落系统教程
-
10–ILS教程我们的ILS(仪表着陆进近)将到达Batumi巴统机场。ILS频率:110.30跑道航向:120磁航向/126真航向无线电塔频率:131.0001.设置雷达高度表开关打开(前)并...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- CSS 水平对齐 (Horizontal Align) (30)