vue3+ts使用APlayer的示例代碼
引言
自己弄新版博客想用APlayer,到github看了一圈沒見有vue3版本的,所以就用基于Aplayer組件化了下,順帶看了下Meting.js,用Meting.js的服務(wù)去獲取指定歌曲,詳見代碼
參考:
https://github.com/DIYgod/APlayer
https://aplayer.js.org/#/zh-Hans/
https://github.com/metowolf/MetingJS
安裝依賴
yarn add aplayer
代碼
APlayer.Vue
<!-- <!-- * @Author: MK * @Date: 2021-12-16 15:41:47 * @LastEditTime: 2021-12-24 11:17:45 * @LastEditors: MK * @Description: APlayer組件化 * @FilePath: \vue-mk-blog\src\components\APlayer.vue --> <template> <div ref="playerRef"></div> </template> <script lang="ts" setup> import http from '@/api/http' import APlayer from 'APlayer'; import 'APlayer/dist/APlayer.min.css'; import type {PropType} from '@vue/runtime-core'; import {nextTick, onBeforeUnmount, onMounted, ref} from 'vue' const playerRef = ref() let instance: APlayer; // APlayer歌曲信息 class Audio { // 音頻藝術(shù)家 artist: String; // 音頻名稱 name: String; // 音頻鏈接 url: String; // 音頻封面 cover: String; // 歌詞 lrc: String; constructor(artist: String, name: String, url: String, cover: String, lrc: String) { this.artist = artist; this.name = name; this.url = url; this.cover = cover; this.lrc = lrc; } } const props = defineProps({ // 開啟吸底模式 fixed: { type: Boolean as PropType<boolean>, default: true }, // 開啟迷你模式 mini: { type: Boolean as PropType<boolean>, default: true }, // 音頻自動播放 autoplay: { type: Boolean as PropType<boolean>, default: false }, // 主題色 theme: { type: String as PropType<string>, default: 'rgba(255,255,255,0.2)' }, // 音頻循環(huán)播放 loop: { type: String as PropType<'all' | 'one' | 'none'>, default: 'all' }, // 音頻循環(huán)順序 order: { type: String as PropType<'list' | 'random'>, default: 'random' }, // 預(yù)加載 preload: { type: String as PropType<'auto' | 'metadata' | 'none'>, default: 'auto' }, // 默認音量 volume: { type: Number as PropType<number>, default: 0.7, validator: (value: Number) => { return value >= 0 && value <= 1; } }, // 歌曲服務(wù)器(netease-網(wǎng)易云, tencent-qq音樂, kugou-酷狗, xiami-小米音樂, baidu-百度音樂) songServer: { type: String as PropType<'netease' | 'tencent' | 'kugou' | 'xiami' | 'baidu'>, default: 'netease' }, // 播放類型(song-歌曲, playlist-播放列表, album-專輯, search-搜索, artist-藝術(shù)家) songType: { type: String as PropType<string>, default: 'playlist' }, // 歌的id songId: { type: String as PropType<string>, default: '19723756' }, // 互斥,阻止多個播放器同時播放,當(dāng)前播放器播放時暫停其他播放器 mutex: { type: Boolean as PropType<boolean>, default: true }, // 傳遞歌詞方式 lrcType: { type: Number as PropType<number>, default: 3 }, // 列表是否默認折疊 listFolded: { type: Boolean as PropType<boolean>, default: true }, // 列表最大高度 listMaxHeight: { type: String as PropType<string>, default: '100px' }, // 存儲播放器設(shè)置的 localStorage key storageName: { type: String as PropType<string>, default: 'aplayer-setting' } }) // 初始化 onMounted(() => { nextTick(() => { http.player.getSongSheet(props.songServer, props.songType, props.songId) .then(res => { let audioList = res.data.map(value => new Audio(value.author, value.title, value.url, value.pic, value.lrc)); 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(() => { instance.destroy() }) </script>
player.ts
import axios from '@/utils/axios' export class player { static getSongSheet(server: string, type:String, id: String) { return axios.get(`https://api.i-meto.com/meting/api?server=${server}&type=${type}&id=${id}&r=${Math.random()}`); } }
效果圖
到此這篇關(guān)于vue3+ts使用APlayer的文章就介紹到這了,更多相關(guān)vue3+ts使用APlayer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
el-select如何獲取下拉框選中l(wèi)abel和value的值
在開發(fā)業(yè)務(wù)場景中我們通常遇到一些奇怪的需求,例如el-select業(yè)務(wù)場景需要同時獲取我們選中的label跟 value,下面這篇文章主要給大家介紹了關(guān)于el-select如何獲取下拉框選中l(wèi)abel和value的值,需要的朋友可以參考下2022-10-10詳解vue中的父子傳值雙向綁定及數(shù)據(jù)更新問題
這篇文章主要介紹了vue中的父子傳值雙向綁定及數(shù)據(jù)更新問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06vue自定義組件(通過Vue.use()來使用)即install的用法說明
這篇文章主要介紹了vue自定義組件(通過Vue.use()來使用)即install的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08使用el-upload組件實現(xiàn)遞歸多文件上傳的全過程
el-upload組件文件上傳都是每個文件請求一次接口,本次實現(xiàn)一次請求上傳多個文件,下面這篇文章主要給大家介紹了關(guān)于使用el-upload組件實現(xiàn)遞歸多文件上傳的相關(guān)資料,需要的朋友可以參考下2023-03-03