vue3中实现音频播放器APlayer

2023-11-19

前言:

        vue2的时候,分享了一个很好用的插件是vue-aplayer,但是他是不支持vue3的,这里分享vue3使用APlayer来实现一个播放器的方法。

实现效果:

官方:

        git地址:点我

        api地址:点我

实现步骤:

1、安装

npm:

npm install aplayer --save

Yarn:

yarn add aplayer

2、页面中引入

import APlayer from 'APlayer';
import 'APlayer/dist/APlayer.min.css';

3、具体使用,源代码

(1)封装 aPlayer.vue

<template>
  <div class="mainPage" ref="playerRef"></div>
</template>

<script setup>
  import APlayer from 'APlayer';
  import 'APlayer/dist/APlayer.min.css';
  import {reactive,nextTick, onBeforeUnmount,getCurrentInstance, onMounted, ref} from 'vue'

  const playerRef = ref()
  const { proxy } = getCurrentInstance()
  const state = reactive({
    instance:null
  })

  // APlayer歌曲信息
  class Audio {
    // 音频艺术家
    // artist: String;
    // 音频名称
    // name: String;
    // 音频链接
    // url: String;
    // 音频封面
    // cover: String;
    // 歌词
    // lrc: String;

    constructor(artist, name, url, cover, lrc) {
      this.artist = artist;
      this.name = name;
      this.url = url;
      this.cover = cover;
      this.lrc = lrc;
    }
  }

  const props = defineProps({
    // 开启吸底模式
    fixed: {
      type: Boolean,
      default: false
    },
    // 开启迷你模式
    mini: {
      type: Boolean,
      default: false
    },
    // 音频自动播放
    autoplay: {
      type: Boolean,
      default: false
    },
    // 主题色
    theme: {
      type: String,
      default: 'rgba(255,255,255,0.2)'
    },
    // 音频循环播放
    loop: {
      type: String,
      default: 'all' //'all' | 'one' | 'none'
    },
    // 音频循环顺序
    order: {
      type: String,
      default: 'random' //'list' | 'random'
    },
    // 预加载
    preload: {
      type: String,
      default: 'auto' //'auto' | 'metadata' | 'none'
    },
    // 默认音量
    volume: {
      type: Number,
      default: 0.7,
      validator: (value) => {
        return value >= 0 && value <= 1;
      }
    },
    // 歌曲服务器(netease-网易云, tencent-qq音乐, kugou-酷狗, xiami-小米音乐, baidu-百度音乐)
    songServer: {
      type: String,
      default: 'netease' //'netease' | 'tencent' | 'kugou' | 'xiami' | 'baidu'
    },
    // 播放类型(song-歌曲, playlist-播放列表, album-专辑, search-搜索, artist-艺术家)
    songType: {
      type: String,
      default: 'playlist'
    },
    // 歌的id
    songId: {
      type: String,
      default: '19723756'
    },
    // 互斥,阻止多个播放器同时播放,当前播放器播放时暂停其他播放器
    mutex: {
      type: Boolean,
      default: true
    },
    // 传递歌词方式
    lrcType: {
      type: Number,
      default: 3
    },
    // 列表是否默认折叠
    listFolded: {
      type: Boolean,
      default: true
    },
    // 列表最大高度
    listMaxHeight: {
      type: String,
      default: '100px'
    },
    // 存储播放器设置的 localStorage key
    storageName: {
      type: String,
      default: 'aplayer-setting'
    }
  })
  onMounted(() => {
    let str = {
      server:props.songServer,
      type:props.songType,
      id:props.songId
    }
    proxy.$api.common.getSongSheet(str).then(res=>{
      let audioList = res.data.map(value => new Audio(value.author, value.title, value.url, value.pic, value.lrc));
      state.instance = new APlayer({
        container: playerRef.value,
        fixed: props.fixed,
        mini: props.mini,
        autoplay: props.autoplay,
        theme: props.theme,
        loop: props.loop,
        order: props.order,
        preload: props.preload,
        volume: props.volume,
        mutex: props.mutex,
        lrcType: props.lrcType,
        listFolded: props.listFolded,
        listMaxHeight: props.listMaxHeight,
        storageName: props.storageName,
        audio: audioList
      })
    })
    // 销毁
    onBeforeUnmount(() => {
      state.instance.destroy()
    })
  })


</script>

<style lang='scss' scoped>
  .mainPage{
    @include wh(100%,auto);
    background: #FCFCFC;
    border: 1px solid #E0E0E0;
    border-radius: 4px;

  }


</style>

(2)父组件调用

   <a-player></a-player>

其他:

        vue3+ts+aplayer版本:点我

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3中实现音频播放器APlayer 的相关文章

随机推荐

  • Shell脚本到底是什么高大上的技术吗?

    本文介绍shell脚本知识 学习前最好有linux命令知识储备 一篇文章看完 下次找工作时简历上请写上会shell脚本 栓Q shell脚本是什么 shell脚本就是一个包含shell命令的脚本 常说的linux命令 也可以认为是shell
  • ArrayList与顺序表

    目录 编辑 一 线性表 二 顺序表 1 接口的实现 1 打印顺序表 2 新增元素 3 判定是否包含某个元素 4 查找某个元素对应的位置下标 5 获取 pos 位置的元素 6 获取顺序表长度 7 给 pos 位置的元素设为 value 更新的
  • C++ 一些学习笔记(三) 内存区域

    C 一些学习笔记 三 内存区域 主要是针对之前学习C的时候一些知识点的遗漏的补充 还有一些我自己觉得比较重要的地方 本文章的主要内容是关于程序内存模型的 内存的分区模型 1 程序运行前 2 程序运行后 3 new操作符 主要是针对之前学习C
  • 华为OD机试 - 路灯照明问题(Java)

    题目描述 在一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间间距固定为100米 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 无法照明的区间的长度和 输入描述 第一行为一个数N 表示路灯个数 1 lt N lt
  • 课程设计总结

    1 政府职能部门 望细分 具体 课程压缩所致 2 企业家 结构好 利于规划 参考 强烈希望协调与管理融合进来 3 工程师 技术人员 指导行强 望精化 深化 细化 4 学生 利于未来规划 创业 就业 发展 学习方向等等 老师总结课程缺陷 1
  • 虚拟机VMware的安装及使用

    一 虚拟机VMware的安装 1 准备工作 1 需要软件VMware安装包 VMware下载地址 http www uzzf com soft 51188 html 2 需要一个系统镜像 windows系统 http www xitongc
  • 【计算机视觉】最后显示的CIFAR-100数据集照片很模糊怎么解决?

    文章目录 一 前言 二 如何解决 2 1 使用图像增强技术 2 2 使用插值方法 2 3 使用更高分辨率的图像数据集 2 4 手动调整图像尺寸 三 总结 一 前言 如果从CIFAR 100数据集加载的图像显示模糊 可能有几个可能的原因 分辨
  • 小程序中里的bindinput_微信小程序中input标签的使用方法(附代码)

    本篇文章给大家带来的内容是关于微信小程序中input标签的使用方法 附代码 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 在开发过程中经常遇到这样的需求 用户只能输入数字并且只保留小数点两位 虽然我们可以在提交表单的时候进行
  • [ASM C/C++] C函数调用分析

    在执行程序时 操作系统为进程分配一块栈空间来保存函数栈帧 esp寄存器总是指向栈顶 x86平台上这个栈是从高地址向低地址增长的 每次调用一个函数都要分配一个栈帧来保存参数和局部变量 C函数参数是按从右到左的顺序入栈的 各个堆栈桢之间是通过把
  • 多线程(1):互斥锁

    leetcode 1114题 按序打印 给你一个类 public class Foo public void first print first public void second print second public void thi
  • 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture

    当我们制作某些屏幕特效时 需要取到屏幕的深度图或法线图 比如ssao 景深等 另外像是制作软粒子shader 体积雾等也需要取到深度图 以计算深度差等 unity提供了两个内置的纹理 CameraDepthTexture和 CameraDe
  • fabric 环境快速搭建--Ubuntu20.04系统下使用fabric官方脚本搭建

    由于是初识hyper ledger fabric在安装的时候遇到了很多的问题 最后在师兄的帮助下终于删了从头到尾安装了一遍 因此想记录一下 并且给和我遇到相同问题的小伙伴提供一些帮助 如果你是萌新 找我就对啦 一 下载虚拟机VMware 直
  • 纯css画三角形及气泡样式的简单画法

    在做项目的过程中 遇到了要写一个气泡的样式 先布局了矩形部分 但小三角形的旗气泡遇到一点困难 后来梳理了一下 以此记录 首先是三角形的画法 三角形的原理就是矩形 然后分成四个三角形 一般使用border来画一个三角形 如下图所示 我们给一个
  • 云服务器木马文件该如何应对,云服务器木马入侵怎么办?服务器中木马怎么排查?...

    由于云服务器的扩展方便 并且能够减少硬件方面的维护成本 因此使用云服务器的用户数量越来越多 但是云服务器也同样存在安全方面的隐患 被入侵的案列也是时有发生 那么云服务器木马入侵怎么办 服务器中木马怎么排查 我们来了解下吧 云服务器木马入侵怎
  • java中抽象工厂模式_Java设计模式之抽象工厂模式

    转自http blog csdn net jason0539 article details 44976775 本文继续介绍23种设计模式系列之抽象工厂模式 前面已经介绍过简单工厂模式和工厂方法模式 这里继续介绍第三种工厂模式 抽象工厂模式
  • js倒计时

    html部分代码 div class time span 60 span span s span div js部分代码 var second document getElementById second var m 60 var time
  • 计算机产业能否迅速发展,工控机产业迅速发展:未来体系结构将更具交互性与可操作性...

    工控机 Industrial Personal Computer IPC 即工业控制计算机 是一种采用总线结构 对生产过程及机电设备 工艺装备进行检测与控制的工具总称 工控机具有重要的计算机属性和特征 如具有计算机CPU 硬盘 内存 外设及
  • 50行Python代码实现代理服务器的详细教程

    代理服务器是一种位于客户端与目标服务器之间的中间服务器 它可以代表客户端发送请求 并将响应返回给客户端 通过搭建自己的代理服务器 我们可以实现请求的拦截 修改和转发等功能 本文将为大家介绍如何使用50行Python代码实现代理服务器 一 准
  • [QT编程系列-37]:数据存储 - 日志文件、日志等级的支持:qDebug、Log4Qt

    目录 1 概述 2 qDebug 2 1 概述 2 2 qDebug对调试等级的支持 通过不同的宏来实现 2 3 qt日志等级的设置 1 概述 在 Qt 中 日志文件的支持通常是通过日志库 日志框架或自定义代码实现的 Qt 本身没有提供内置
  • vue3中实现音频播放器APlayer

    前言 vue2的时候 分享了一个很好用的插件是vue aplayer 但是他是不支持vue3的 这里分享vue3使用APlayer来实现一个播放器的方法 实现效果 官方 git地址 点我 api地址 点我 实现步骤 1 安装 npm npm