Vue 动态设置audio/video的src 播放错乱问题

在这里插入图片描述

 <el-dialog :visible.sync="AudioOpen"
               :close-on-click-modal="false"
               :destroy-on-close="true"
               @close="playerAudioVisible=false"
               width="330px"
               class="dialogAV"
    >

      <audio
        v-if="AudioOpen"
        controls
        class="audio"
        ref="dialogAudio"
        preload="meta"
        width="100%">
        <source :src= audioUrl >
        您的浏览器不支持audio标签。
      </audio>
    </el-dialog>

这是因为VUE对DOM更新是异步的 当我们改变src属性数据后,DOM上绑定的src属性没有立即更新,所以操作DOM可能会报错

为了保证能在更新完成后去操作可以使用 $nextTick
他保证在更新队列完成后去执行回调方法。

playAudio(url){
      this.audioUrl = process.env.VUE_APP_BASE_API +url;
      this.$nextTick(res => {
        const { dialogAudio } = this.$refs
        dialogAudio.load()
        dialogAudio.play()
      })
      this.AudioOpen=true
    },

或者在标签上加上 v-if 重新加载标签

 <audio
        v-if="AudioOpen"
        controls
        class="audio"
        ref="dialogAudio"
        preload="meta"
        width="100%">
        <source :src= audioUrl >
        您的浏览器不支持audio标签。
      </audio>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值