表格自定义音频播放组件

文章介绍了如何在项目中导入并使用Audiosvue组件,展示了一个包含音频文件处理、播放/暂停功能以及实时时间进度条的示例,展示了音频控制组件的实现细节。
摘要由CSDN通过智能技术生成

1.在使用的地方调用

 <Audiosvue  ref="audio" class="audio-box" :audioFile="item.cont"></Audiosvue>

 2.引入组件

import Audiosvue from "@/components/audio";

 3.组件

<template>
  <div>
    <div style="display: flex;align-items: center;">
      <input type="range" v-model="progress" min="0" max="100" step="0.1" @input="updateAudioTime"  class="inputStyle">
      <span style="width: 100px;display: block;">{{ currentTime }} / {{ totalTime }}</span>
      <button @click="playPauseAudio">{{ isPlaying ? '暂停' : '播放' }}</button>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    audioFile: {
      type: String,
    },
  },
  data() {
    return {
      audio: null,
      isPlaying: false,
      currentTime: '00:00',
      totalTime: '00:00',
      progress: 0,
      isDragging: false
    };
  },

  computed: {

  },
  mounted() {
    // this.fetch();
  },
  created() {
   // 创建 Audio 对象
   this.audio = new Audio(this.audioFile);

// 监听时间更新事件
this.audio.addEventListener('timeupdate', this.updateTimeAndProgressBar);
  },
  methods: {
    playPauseAudio() {
      if (this.isPlaying) {
        this.audio.pause();
      } else {
        this.audio.play();
      }
      this.isPlaying = !this.isPlaying;
    },
    updateAudioTime() {
      const currentTime = (this.progress / 100) * this.audio.duration;
      this.audio.currentTime = currentTime;

      if (!this.isDragging) {
        this.updateTimeAndProgressBar();
      }
    },
    updateTimeAndProgressBar() {
      const currentTime = this.audio.currentTime;
      const totalTime = this.audio.duration;

      this.currentTime = this.formatTime(currentTime);
      this.totalTime = this.formatTime(totalTime);

      this.progress = (currentTime / totalTime) * 100;
    },
    formatTime(time) {
      const minutes = Math.floor(time / 60);
      const seconds = Math.floor(time % 60);
      return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
    }
  },
};
</script>

<style lang="scss" scoped>
.inputStyle{
  width: 200px;
}
</style>

4.效果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值