【Vue】:解决动态更新 <video> 标签 src 属性后视频未刷新的问题

问题描述

在 Vue.js 项目,当尝试动态更新 <video> 标签的 <source> 元素 src 属性来切换视频时,遇到了一个问题:即使 src 属性已更改,浏览器仍显示旧视频。具体表现为用户选择新视频后,视频区域继续显示之前的视频,未能加载新视频源。

复制代码
<template>
    <video controls>
       <source :src="videoUrl" type="video/mp4">
       Your browser does not support the video tag.
    </video>
</template>

原因分析

1.Vue 的虚拟 DOM 更新机制

尽管 videoUrl 数据发生了变化,但由于 <video> 和 <source> 标签的特殊性,Vue 的默认更新策略可能不会触发这些元素的重载。这意味着即使 src 属性改变了,实际的媒体资源并没有被重新加载。

解决方案:

为了解决上述问题,可以采取以下几种解决方案:

1. 使用 key 属性

给 <video> 标签添加一个 :key="videoUrl" 绑定属性,使得每次 videoUrl 变化时,整个 <video> 元素都会被重新创建,从而强制刷新视频内容。

复制代码
<template>
    <video :key="videoUrl" controls>
       <source :src="videoUrl" type="video/mp4">
       Your browser does not support the video tag.
    </video>
</template>

2. 直接绑定 src 属性到 <video> 标签

通过这种方式,您可以直接在 <video> 标签上设置 src 属性,这可能会减少由于 <source> 元素的存在而带来的复杂性。当 src 属性发生变化时,浏览器通常会自动重新加载视频,因为它是直接绑定到 <video> 元素上的。

复制代码
<template>
    <video :src="videoUrl" controls>
       Your browser does not support the video tag.
    </video>
</template>

总结

本文介绍了在 Vue.js 中遇到的动态更新 <video> 标签 src 属性后视频未刷新的问题及其原因,并提供了多种有效的解决方案。无论是简化代码结构还是使用 key 属性,都可以帮助您解决这个问题。根据具体的应用场景和个人偏好选择最适合的方案,确保视频组件能够及时响应用户操作并展示最新的内容。

但对于原因分析不是很确定,如果有不同意见,欢迎指教讨论。

相关推荐
VidDown17 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
u1521096484917 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
VidDown17 天前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频
VidDown17 天前
视频帧率技术详解:从 24fps 到 120fps,帧率如何影响你的观看体验?
网络·网络协议·编辑器·音视频·视频编解码·视频
DolitD17 天前
点盾云新增VR加密功能:一机一码,让VR内容分发安全可控
安全·vr·视频
u1521096484917 天前
S.S.Audio PRO A202 音频隔离器
音视频·实时音视频·视频编解码·视频·被复线
小葛要努力18 天前
安装nvm 管理node.js版本实现vue2和vue3项目共存
node.js·vue·nvm
这里是杨杨吖19 天前
SpringBoot+Vue高校在线考试系统 附带详细运行指导视频
vue·在线考试·springboot
wuxia211819 天前
在5种环境中编写点击元素改变内容和颜色的JavaScript程序
javascript·微信小程序·vue·jquery·react
Sweet锦19 天前
Vue3 集成 ApexCharts 避坑指南:从动画失效到自定义指令的完美解决方案
vue·echarts