vue中v-if影响同级audio标签播放?

发布于 2022-09-11 16:11:37 字数 592 浏览 15 评论 0

问题描述

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灯下孤影 2022-09-18 16:11:37

可以了解一下vuediff算法相关的实现。比如这篇文章

这种情况应该会出现于audio前后(不仅限于相邻)的兄弟节点中都存在v-if的情况。

因为vuediff是基于同层级比较的,并且updateChildren方法中的VNode比较是从节点左右两侧向中间靠拢的,所以当audio前后都存在v-if时,virtual dom重新渲染时,会将audio这个dom进行移动,所以实际上audio是会被从父节点移除然后再重新加入(可以通过给audio绑定DOMNodeRemoved来验证)。

由于audio被移除过,所以播放会被停止。至于v-show没有此问题,是因为v-show前后dom结构未发生改变。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文