vue中v-if影响同级audio标签播放?
问题描述
vue环境中,audio标签自动播放的情况下,更改同级的div标签v-if条件为非,会导致当前音频暂停。
如果将v-if替换为v-show则没有此问题
以下是部分代码
<audio class="basic-audio" :src="audio" autoplay="autoplay" @ended="ended"></audio>
<div class="content-region" v-if="chooseCard">
<el-row type="flex" v-for="(item,index) in contentList" :key="index" >
<el-col class="content-lattice" v-for="(item,index1) in item" :key="index1">{{item.name}}</el-col>
</el-row>
</div>
注:audio未添加播放、暂停事件
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以了解一下
vue
中diff
算法相关的实现。比如这篇文章。这种情况应该会出现于
audio
前后(不仅限于相邻)的兄弟节点中都存在v-if
的情况。因为
vue
中diff
是基于同层级比较的,并且updateChildren
方法中的VNode
比较是从节点左右两侧向中间靠拢的,所以当audio
前后都存在v-if
时,virtual dom
重新渲染时,会将audio
这个dom
进行移动,所以实际上audio
是会被从父节点移除然后再重新加入(可以通过给audio
绑定DOMNodeRemoved
来验证)。由于
audio
被移除过,所以播放会被停止。至于v-show
没有此问题,是因为v-show
前后dom
结构未发生改变。