You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue框架下点击按钮onClick切换audio音频源运行无效果求助

问题原因

  • 拼写错误:crossOrigin的属性值拼写错误,正确应为anonymous,你写的anonymus少了一个字母o,会导致跨域配置不生效,跨域音频无法正常加载播放
  • 操作逻辑冲突:你同时给audio标签绑定了响应式属性:src="audioSrc",又直接通过$refs操作DOM修改src,Vue的响应式更新逻辑会覆盖你手动修改的DOM属性,导致配置不生效
  • 路径解析问题:Vue项目中assets目录下的资源属于编译时处理的资源,直接写相对路径../assets/voice.mp3打包后路径会失效,需要用require引入资源
  • 自动播放异常未处理:现代浏览器默认禁止非用户交互触发的音频自动播放,即使是点击事件触发的play()也可能因为音频加载慢、资源无效等问题抛出异常,需要做异常捕获

修正后代码

JS部分

data() {
    return {
      audioSrc: ''
    }
  },
  methods: {
    setActiveAudio(item) {
      // 修改响应式变量,由Vue统一更新audio的src属性
      this.audioSrc = item;
      // 等待DOM更新完成后再操作音频
      this.$nextTick(() => {
        const audio = this.$refs.audioElm;
        audio.crossOrigin = 'anonymous';
        audio.currentTime = 0;
        // 捕获播放异常
        audio.play().catch(err => {
          console.log('音频播放失败:', err);
        });
      })
    },
  },

模板部分

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<!-- assets下的音频资源用require包裹,确保打包后路径正确 -->
<span class="voice-btn" @click="setActiveAudio(require('../assets/voice.mp3'))"> Click Sound</span>
<audio ref="audioElm" :src="audioSrc"></audio>

内容的提问来源于stack exchange,提问作者Mustafa Özgün

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:06:03