UniApp实现音乐播放与音乐搜索的实现方法
UniApp是基于Vue.js框架的前端开发框架,可以实现一次开发,多端发布的效果。本文将介绍如何使用UniApp实现音乐播放和音乐搜索功能。
一、使用UniApp实现音乐播放
在UniApp中实现音乐播放功能的点睛之笔是H5播放器,使用H5播放器可以支持在APP、微信、支付宝小程序等多个平台上播放音乐。
需要注意的是,在使用H5播放器时要注意安卓和iOS系统的差异性,因为在安卓系统中音乐的播放需要通过muted属性来触发,而在iOS系统上则要通过用户手动操作才会有音乐播放。
下面是UniApp实现音乐播放功能的示例代码:
// index.vue
<template>
<view>
<audio @play="onPlay">
<source src="{{audioUrl}}">
</audio>
<button @click="play">播放</button>
</view>
</template>
<script>
export default {
data() {
return {
audioUrl: 'https://music.163.com/song/media/outer/url?id=434529132.mp3',
};
},
methods: {
play() {
const audio = uni.createSelectorQuery().select('audio');
audio.boundingClientRect(function(rect) {
audio.observer(function(res) {
uni.showModal({
title: '播放状态',
content: `播放状态: ${res.intersectionRatio !== 0}`,
});
}).observeIntersectionObserver();
}).exec();
audio.src = this.audioUrl;
audio.play();
},
onPlay() {
uni.showModal({
title: '播放状态',
content: '播放开始',
});
},
},
};
</script>
代码中使用了audio标签来加载音乐链接,然后通过uni.createSelectorQuery方法获取到audio节点的实例,从而对音乐节点进行观察。在观察到音乐节点时,可以使用uni.showModal方法来实时显示音乐的播放状态。
二、使用UniApp实现音乐搜索
在实现音乐搜索功能时,需要使用到第三方的API接口来获取音乐信息。这里使用了NeteaseCloudMusicApi来获取音乐数据。
首先,需要在项目中安装NeteaseCloudMusicApi:
// 安装NeteaseCloudMusicApi
npm install NeteaseCloudMusicApi --save-dev
接着,需要在项目中进行配置:
// uni.config.js文件
module.exports = {
pluginOptions: {
express: {
shouldServeApp: true,
serverDir: 'server'
}
}
}
配置完成后,新建一个server文件夹,在文件夹中新建一个server.js文件。在文件中编写以下代码:
// server.js
const express = require('express')
const { createProxyMiddleware } = require('http-proxy-middleware')
const app = express()
// 跨域代理
app.use('/api',createProxyMiddleware({
target: 'http://localhost:3000',
changeOrigin: true
}))
app.listen(3001,() => {
console.log('服务器已启动')
})
代码中通过http-proxy-middleware进行跨域代理,将/api请求代理到http://localhost:3000服务器上。
下面是UniApp中实现音乐搜索的示例代码:
// index.vue
<template>
<view>
<form @submit.prevent="submit">
<input v-model="keyword"/>
<button>搜索</button>
</form>
<ul>
<li v-for="(item, index) in songList" :key="index" @click="play(item.id)">{{item.name}}</li>
</ul>
</view>
</template>
<script>
export default {
data() {
return {
keyword: '',
songList: [],
};
},
methods: {
async submit() {
const res = await uni.request({
url: '/api/search',
method: 'GET',
data: {
keyword: this.keyword,
},
});
this.songList = res.data.response.songs;
},
async play(id) {
const res = await uni.request({
url: '/api/song',
method: 'GET',
data: {
id,
},
});
const audio = uni.createSelectorQuery().select('audio');
audio.src = res.data.response[0].url;
audio.play();
},
},
};
</script>
代码中通过uni.request方法获取到/api/search和/api/song两个API接口返回的数据,从而实现了音乐搜索功能。同时,也实现了将搜索结果列表中的音乐直接播放出来的功能。
结语
本文介绍了如何在UniApp中实现音乐播放和音乐搜索功能。实现音乐播放功能需要注意安卓和iOS系统的差异性,而实现音乐搜索功能需要使用第三方API接口来获取音乐数据。希望本文能够对大家有所帮助。