vue3에서 오디오 플레이어 APlayer를 구현하는 방법

王林
풀어 주다: 2023-05-26 08:28:07
앞으로
1931명이 탐색했습니다.

구현 효과:

vue3에서 오디오 플레이어 APlayer를 구현하는 방법

구현 단계:

1. npm:

npm install aplayer --save
로그인 후 복사

Yarn:

yarn add aplayer
로그인 후 복사

3을 페이지에 소개합니다. ) 캡슐화 aPlayer .vue

import APlayer from 'APlayer';
import 'APlayer/dist/APlayer.min.css';
로그인 후 복사

(2) 상위 구성 요소 호출

<template>
  <div class="mainPage" ref="playerRef"></div>
</template>
<script setup>
  import APlayer from &#39;APlayer&#39;;
  import &#39;APlayer/dist/APlayer.min.css&#39;;
  import {reactive,nextTick, onBeforeUnmount,getCurrentInstance, onMounted, ref} from &#39;vue&#39;
 
  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: &#39;rgba(255,255,255,0.2)&#39;
    },
    // 音频循环播放
    loop: {
      type: String,
      default: &#39;all&#39; //&#39;all&#39; | &#39;one&#39; | &#39;none&#39;
    },
    // 音频循环顺序
    order: {
      type: String,
      default: &#39;random&#39; //&#39;list&#39; | &#39;random&#39;
    },
    // 预加载
    preload: {
      type: String,
      default: &#39;auto&#39; //&#39;auto&#39; | &#39;metadata&#39; | &#39;none&#39;
    },
    // 默认音量
    volume: {
      type: Number,
      default: 0.7,
      validator: (value) => {
        return value >= 0 && value <= 1;
      }
    },
    // 歌曲服务器(netease-网易云, tencent-qq音乐, kugou-酷狗, xiami-小米音乐, baidu-百度音乐)
    songServer: {
      type: String,
      default: &#39;netease&#39; //&#39;netease&#39; | &#39;tencent&#39; | &#39;kugou&#39; | &#39;xiami&#39; | &#39;baidu&#39;
    },
    // 播放类型(song-歌曲, playlist-播放列表, album-专辑, search-搜索, artist-艺术家)
    songType: {
      type: String,
      default: &#39;playlist&#39;
    },
    // 歌的id
    songId: {
      type: String,
      default: &#39;19723756&#39;
    },
    // 互斥,阻止多个播放器同时播放,当前播放器播放时暂停其他播放器
    mutex: {
      type: Boolean,
      default: true
    },
    // 传递歌词方式
    lrcType: {
      type: Number,
      default: 3
    },
    // 列表是否默认折叠
    listFolded: {
      type: Boolean,
      default: true
    },
    // 列表最大高度
    listMaxHeight: {
      type: String,
      default: &#39;100px&#39;
    },
    // 存储播放器设置的 localStorage key
    storageName: {
      type: String,
      default: &#39;aplayer-setting&#39;
    }
  })
  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=&#39;scss&#39; scoped>
  .mainPage{
    @include wh(100%,auto);
    background: #FCFCFC;
    border: 1px solid #E0E0E0;
    border-radius: 4px;
 
  }
</style>
로그인 후 복사

위 내용은 vue3에서 오디오 플레이어 APlayer를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿