vue中添加mp3音频文件的方法

yizhihongxing

下面是详细讲解 Vue 中添加 mp3 音频文件的方法的完整攻略。

1.准备工作

在 Vue 项目的 public 目录下创建 audio 目录,并将需要添加的 mp3 音频文件放置在该目录下。

2.添加音频标签

在需要添加音频的组件中,使用 HTML5 音频标签 audio,并为其设置 src 属性为音频文件的相对路径:

<audio src="./audio/music.mp3" controls></audio>

其中,controls 属性表示播放器应该显示标准控件,例如播放/暂停按钮和音量控制。

3.使用 Vue 组件来加载音频

如果你更喜欢使用 Vue 组件来加载音频,那么你可以先在组件中添加如下代码:

import music from "@/audio/music.mp3";

export default {
  data() {
    return {
      audio: new Audio(music),
    };
  },
  mounted() {
    this.audio.load();
  },
};

其中,import 语句用于从相对路径中加载音频文件,new Audio() 方法用于创建一个新的音频对象,this.audio.load() 方法用于预加载音频文件。

接下来,你可以在组件模板中使用 <audio> 标签,然后将其 src 属性设置为音频对象的 URL:

<audio :src="audio.src" controls></audio>

示例说明

示例 1:添加多个音频文件

如果你需要添加多个音频文件,那么你可以在 data 中定义一个包含所有音频文件的数组,并使用 v-for 循环遍历它,然后为每个音频文件创建一个音频对象。

import music1 from "@/audio/music1.mp3";
import music2 from "@/audio/music2.mp3";
import music3 from "@/audio/music3.mp3";

export default {
  data() {
    return {
      audios: [
        { id: 1, src: music1 },
        { id: 2, src: music2 },
        { id: 3, src: music3 },
      ],
    };
  },
  mounted() {
    this.audios.forEach((audio) => {
      audio.obj = new Audio(audio.src);
      audio.obj.load();
    });
  },
};

接下来,你可以在组件模板中使用 <audio> 标签,然后将其 src 属性设置为音频对象的 URL,如下所示:

<div v-for="audio in audios" :key="audio.id">
  <audio :src="audio.obj.src" controls></audio>
</div>

示例 2:添加带有自定义控件的音频

如果你需要添加带有自定义控件的音频,那么你可以使用 Vue 组件来封装音频播放器。

<template>
  <div class="audio-player">
    <audio ref="audio" :src="src" @timeupdate="updateTime"></audio>
    <div class="progress-bar">
      <div class="progress" :style="{ width: progress + '%' }"></div>
    </div>
    <div class="controls">
      <button class="play" :class="{ paused: paused }" @click="togglePlay"></button>
      <div class="time">{{ currentTime }} / {{ duration }}</div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    src: {
      type: String,
      required: true,
    },
  },
  data() {
    return {
      audio: null,
      paused: true,
      progress: 0,
      currentTime: 0,
      duration: 0,
    };
  },
  methods: {
    togglePlay() {
      if (this.paused) {
        this.audio.play();
      } else {
        this.audio.pause();
      }
      this.paused = !this.paused;
    },
    updateTime() {
      this.currentTime = this.formatTime(this.audio.currentTime);
      this.duration = this.formatTime(this.audio.duration);
      this.progress = (this.audio.currentTime / this.audio.duration) * 100;
    },
    formatTime(time) {
      const seconds = Math.floor(time % 60);
      const minutes = Math.floor(time / 60);
      return minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
    },
  },
  mounted() {
    this.audio = this.$refs.audio;
    this.audio.load();
    this.audio.addEventListener("timeupdate", this.updateTime);
  },
  beforeDestroy() {
    this.audio.removeEventListener("timeupdate", this.updateTime);
  },
};
</script>

<style>
/* 样式省略,具体可以自行定义 */
</style>

使用该组件时,你只需要在父组件中添加如下代码:

<audio-player src="./audio/music.mp3"></audio-player>

其中,src 属性表示音频文件的相对路径。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中添加mp3音频文件的方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 使用Vue-cli3.0创建的项目 如何发布npm包

    下面我将详细讲解使用Vue-cli3.0创建的项目如何发布npm包的完整攻略。 1. 创建Vue-cli3.0项目 使用Vue-cli3.0创建一个Vue项目,可以通过以下命令进行创建: vue create my-project 该命令会在当前目录下创建一个名为my-project的Vue项目。 2. 编写组件 在my-project项目中,使用Vue框架…

    Vue 2023年5月28日
    00
  • Vue两个版本的区别和使用方法(更深层次了解)

    下面是详细讲解“Vue两个版本的区别和使用方法(更深层次了解)”的完整攻略。 概述 Vue.js是一个流行的JavaScript库,用于构建现代交互式Web界面。Vue.js具有响应式且易于理解的API和一套逐渐增长的生态系统。Vue.js可以通过任何Web服务器和通过浏览器直接访问。 Vue.js的最新版本是Vue3,但Vue2也仍然广泛使用。不同的是,V…

    Vue 2023年5月28日
    00
  • vue之数据交互实例代码

    下面我将详细讲解“vue之数据交互实例代码”的完整攻略。首先,请确认您已经了解 Vue.js 的基础知识。 标题 一、前言 数据交互是 Web 开发中最为常见的需求之一,而 Vue.js 提供了轻松的途径实现数据交互。以前是通过 jQuery 来实现数据交互的,但是 Vue.js 的出现,为我们提供了一种更优秀的数据交互解决方案。 二、Vue.js 的数据交…

    Vue 2023年5月28日
    00
  • Vue之组件的自定义事件详解

    Vue之组件的自定义事件详解 Vue是一个基于组件化开发的框架,组件的通信是非常重要的一部分。除了父子组件之间的通信,组件之间可以使用自定义事件来进行通信。本文将详细讲解Vue组件的自定义事件的使用方法。 什么是Vue组件的自定义事件 在Vue组件中,我们可以使用$emit()方法来触发自定义事件,然后在父组件中通过监听该自定义事件来接收数据。在一个父组件中…

    Vue 2023年5月28日
    00
  • JS操作对象数组实现增删改查实例代码

    下面是JS操作对象数组实现增删改查实例代码的完整攻略。 1. 创建对象数组 首先,我们需要创建一个对象数组,用来存放数据。对象数组是一组相关联的拥有共同属性和方法的对象,可以进行统一管理。 let students = [ { name: "张三", age: 18, gender: "男" }, { name: &q…

    Vue 2023年5月27日
    00
  • 对vuex中store和$store的区别说明

    对vuex中store和$store的区别说明 在使用Vue框架开发应用时,如果需要进行状态管理,通常使用Vuex库。在使用Vuex时,我们经常会看到store和$store这两个概念,这两者之间有什么区别呢? store store是Vuex的核心概念,它是一个数据存储的中心,用于管理着应用程序中的全部响应式状态。store中的状态是响应式的,这意味着当我…

    Vue 2023年5月27日
    00
  • vue实现秒杀倒计时组件

    关于如何使用vue实现秒杀倒计时组件,以下是详细讲解: 1. 确认需求 在开始开发之前,我们需要先明确需求,确定倒计时组件的功能和样式要求。例如,我们的秒杀倒计时需要支持以下功能: 显示倒计时的小时、分钟和秒钟; 支持自定义倒计时的截止时间; 支持在倒计时结束时触发自定义回调事件; 样式需求:支持自定义组件的大小、字体样式和颜色等属性。 2. 开始开发 2.…

    Vue 2023年5月29日
    00
  • vue实现table表格里面数组多层嵌套取值

    下面就是具体的步骤。 步骤 首先,在table组件中,需要在columns中定义表格的列信息,每个列的field属性对应每一行数据的字段名。 javascript columns: [ {label:’ID’,field:’id’}, {label:’用户名’,field:’userName’}, {label:’手机号码’,field:’phone’}, …

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部