vue3中audio标签自定义播放音频

该文描述了一个Vue.js组件,用于管理音频播放。通过v-for循环遍历音频列表,使用点击事件切换播放状态。handlePlayMusic函数处理播放,包括延迟设置音频源以确保v-if更新,而handleCloseMusic函数则暂停播放并重置状态。100毫秒的延迟用于等待视图重新渲染。
摘要由CSDN通过智能技术生成

html部分:

  <!-- 此处省略 v-for循环音频的列表 -->
  <!-- 点击两个图标进行切换播放状态-->
  <div>
    <img
      class="pause_icon"
      @click="handlePlayMusic(item.audioUrl)"
      v-if="(musicSrc == item.audioUrl && !isPlay) || musicSrc !== item.audioUrl"
      src="../../assets/voice/pause_icon.png"
      alt=""
    />
    <img
      class="pause_icon"
      @click="handleCloseMusic()"
      v-if="musicSrc == item.audioUrl && isPlay"
      src="../../assets/voice/play_icon.png"
      alt=""
    />
  </div>
  <audio id="audio" ref="audio" class="aud" v-if="musicSrc">
    <source :src="musicSrc" />
  </audio>

js部分:

let musicSrc = ref(""); //当前选中音频文件的路径
let isPlay = ref(false); //当前音频是否在播放
const audio = ref(null);
// 播放音频
const handlePlayMusic = (path) => {
// path是列表中某项的音频路径
  if (path !== musicSrc.value) {
    musicSrc.value = "";
    let timeout = setTimeout(() => {
      musicSrc.value = path;
      clearTimeout(timeout);
    }, 100);
  }
  let platout = setTimeout(() => {
    let dom = audio.value;
    console.dir(dom);
    dom.play();
    isPlay.value = true;
    clearTimeout(platout);
  }, 300);
};
// 关闭音频
const handleCloseMusic = () => {
  let dom = audio.value;
  dom.pause();
  isPlay.value = false;
  musicSrc.value = "";
};

效果图:
在这里插入图片描述

注意:去切换音频文件的时候有100毫秒的延迟,一定要异步,因为有v-if,需要重新渲染,播放的时候也需要延迟执行。

Vue3 ,你可以使用 JavaScript 的原生事件处理加上自定义的组件属性或方法来监听音频元素 (Audio) 的暂停和播放操作。以下是基本步骤: 1. 首先,在模板 (`template`) 或者 `setup` 函数创建一个 Audio 组件实例,并将其绑定到数据属性上,比如 `audioRef`: ```html <template> <div> <button @click="play">播放</button> <button @click="pause">暂停</button> <audio ref="audio" :src="audioSrc"></audio> </div> </template> <script setup> import { ref } from 'vue'; const audioSrc = '/path/to/audio.mp3'; const audioRef = ref(new Audio(audioSrc)); </script> ``` 2. 然后,在 `methods` 区块里添加 `play` 和 `pause` 方法,分别用于控制音频播放和暂停: ```js <script setup> // ... 上面的代码 ... function play() { if (!audioRef.value.paused) { audioRef.value.pause(); } else { audioRef.value.play(); } } function pause() { audioRef.value.pause(); } </script> ``` 3. 当你想监听音频的暂停和播放状态变化时,可以使用 `addEventListener` 方法给音频元素添加事件监听器: ```js <script setup> // ... 上面的代码 ... const isPlaying = computed(() => !audioRef.value.paused); audioRef.value.addEventListener('pause', () => { // 音频暂停时执行的操作 }); audioRef.value.addEventListener('play', () => { // 音频开始播放时执行的操作 }); </script> ``` 现在,当你点击按钮,音频就会按照指令播放或暂停,同时可以根据需要响应音频的状态改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值