更新记录
v1.0.0(2026-10-26) 下载此版本
首发版本:全局播放单例、迷你条+全屏播放页、弹性歌词动画、进度拖拽、播放列表、播放模式切换、点赞事件。
平台兼容性
uni-app(3.8.7)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | √ | √ | √ | - | √ | √ | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
uni-music-player 插件使用指南
版本:1.1.0 · 许可:MIT
全端音乐播放插件:JS 单例播放内核 + 统一组件(迷你播放条 + 全屏播放页合一),仿 Apple Music 歌词弹性动画,uni_modules引入即用。
一、插件特性
- 全端播放:App 端使用后台音频管理器(锁屏 / 通知栏可控、支持后台播放),H5 / 小程序使用 InnerAudioContext;音频单例常驻,切页面不打断
- Apple Music 弹性歌词:当前行之后 1~9 行依次回弹,级联波动动画;当前行平滑放大高亮
- 完整播放能力:播放列表、列表循环 / 单曲循环 / 随机播放、进度拖拽、点击歌词跳转、上一首 / 下一首(3 秒规则)
- 歌词解析内置:标准 LRC(
[mm:ss.xx])解析,支持一行多标签、数组格式直传 - 样式隔离:组件样式均为
scoped,类名(ump-前缀)不会泄漏到宿主页面 - 加载态反馈:换歌 / 地址解析期间显示加载指示,自动防止重复触发
- H5 键盘控制:PC 浏览器中空格播放 / 暂停,左右键快进 / 快退 5 秒,Esc 收起播放页
二、平台兼容性
2.1 总览
| 平台分类 | 支持情况 |
|---|---|
| App(vue) | ✅ 支持(含后台播放、锁屏 / 通知栏 / 耳机线控) |
| App(nvue) | ❌ 不支持 |
| H5 移动端 | ✅ Safari、Android Browser、微信浏览器(Android)、QQ浏览器(Android) |
| H5 PC 端 | ✅ Chrome、Edge(含键盘控制) |
| 微信小程序 | ✅ 支持 |
| 支付宝小程序 | ✅ 支持 |
| 百度小程序 | ✅ 支持 |
| 字节跳动小程序 | ✅ 支持 |
| QQ 小程序 | ✅ 支持 |
| 云函数(阿里云 / 腾讯云 tcb) | ✅ 支持 |
2.2 各端播放内核差异
| 平台 | 播放内核 | 后台播放 | 说明 |
|---|---|---|---|
| App | getBackgroundAudioManager |
✅ 支持 | 锁屏 / 通知栏可控,支持耳机线控上一首 / 下一首,无需额外模块配置 |
| H5 | InnerAudioContext |
跟随浏览器 | 浏览器要求用户手势后才能播放,play() 须在点击回调中调用 |
| 小程序 | InnerAudioContext |
❌ 默认不支持 | 退到后台会中断,属平台限制;微信端如需真后台播放,可自行替换为 wx.getBackgroundAudioManager 并配置 requiredBackgroundModes |
三、快速开始(3 步接入)
第 1 步:引入播放器单例
import musicPlayer from '@/uni_modules/uni-music-player'
单例全局唯一,跨页面播放不中断。
第 2 步:设置播放列表并播放
musicPlayer.setPlaylist([
{
id: '1', // 建议:列表内唯一
title: '星光轨道',
artist: '合成演示',
cover: '/static/demo-music/cover1.png', // 封面图
src: '/static/demo-music/song1.wav', // 音频直链;也支持 async (song) => url
lrc: '[00:00.00]晚风穿过霓虹的街\n[00:03.00]星光落在你眼睑' // LRC 文本
}
], { index: 0, autoplay: true })
第 3 步:放置统一组件
<uni-music-player :visible="showPlayer" @open="showPlayer = true" @close="showPlayer = false" />
即可获得:迷你条常驻底部(无歌自动隐藏)→ 点击展开全屏播放页 → 弹性歌词 / 进度拖拽 / 播放列表 / 模式切换。
组件位于
uni_modules且以uni-开头,HBuilderX 默认开启 easycom 自动注册;若项目关闭了 autoscan,手动 import 即可。
四、JS API
| 方法 | 说明 |
|---|---|
setPlaylist(list, { index, autoplay }) |
设置播放列表;index 起始下标(默认 0),autoplay 是否自动播放(默认 true) |
play(index?) |
播放下标歌曲;不传则继续当前歌曲。换歌加载期间调用会被忽略(防重入) |
pause() / toggle() |
暂停 / 播放暂停切换 |
next(auto?) / prev() |
下一首 / 上一首(当前曲播放超 3 秒时 prev 回到本曲开头) |
seek(seconds) |
跳转到指定秒数;duration 已知时自动钳制到 [0, duration] |
setMode(mode) / cycleMode() |
设置 / 循环切换模式:'list' 列表循环、'one' 单曲循环、'random' 随机 |
stop() |
停止播放并重置进度(保留播放列表与当前曲目,之后 play() 可继续) |
on(name, handler) / off(name, handler) |
订阅 / 取消订阅事件,on 返回取消函数 |
事件
| 事件 | 回调参数 | 触发时机 |
|---|---|---|
change |
{ song, index, lyrics } |
切换歌曲(含列表信息与已解析歌词) |
playstate |
{ playing } |
播放 / 暂停状态变化 |
timeupdate |
{ currentTime, duration, percent, playing } |
进度更新(约 4 次 / 秒) |
modechange |
{ mode } |
播放模式变化 |
playlistchange |
{ playlist } |
播放列表被替换 |
error |
{ err, song } |
播放出错 / 地址解析失败 |
只读状态
musicPlayer.song / playlist / index / lyrics / playing / loading / mode / currentTime / duration
(loading 为 true 表示正在加载音频或换歌)
五、组件属性与事件
uni-music-player(统一组件)
| 属性 | 类型 | 说明 |
|---|---|---|
visible |
Boolean | 是否显示全屏播放页(默认 false) |
showLyrics |
Boolean | 是否显示歌词页(默认 true;传 false 进入无歌词模式) |
| 事件 | 说明 |
|---|---|
open |
点击迷你条(用于展开全屏播放页) |
close |
点击全屏页左上角收起 |
like |
{ liked, song } 点击喜欢 |
六、平台注意事项
- App 后台播放:使用
getBackgroundAudioManager,锁屏与通知栏可控,支持耳机线控;真机后台播放需系统未锁定应用进程。 - H5 自动播放策略:浏览器要求用户手势后才能播放,
setPlaylist/play()请在点击回调中调用,否则会有 autoplay 警告且无声。 - 小程序后台播放:默认使用
InnerAudioContext,退到后台会中断(平台限制)。微信端如需真背景播放,请自行替换为wx.getBackgroundAudioManager并在manifest.json的mp-weixin中配置requiredBackgroundModes: ["audio"]。 - 小程序本地歌词:小程序端无法
request读取包内.lrc文件,请将 LRC 文本内嵌到歌曲数据中(或从接口获取)。
七、常见问题
Q:组件样式会影响我的页面吗?
不会。组件 <style> 均为 scoped,所有类名(ump- 前缀)只在组件内部生效。
Q:点击播放没有声音 / 控制台报 autoplay 警告?
H5 浏览器要求用户手势触发播放,请在点击事件回调中调用 setPlaylist 或 play。
Q:如何替换默认图标 / 封面兜底图?
替换插件目录 static/icons/ 下的同名 PNG(建议保持尺寸与透明风格一致)。
Q:播放列表只有一首歌时,播放结束会怎样?
列表循环 / 单曲循环模式下重新播放当前歌曲;随机模式在单曲时退化为重播。
Q:正式商用有什么注意的?
内置图标资源沿用自开源音乐项目,正式商用前建议替换 static/icons/ 下图标以避免版权风险。
八、完整接入示例
参见项目内 pages/index/index.vue,核心逻辑:
import musicPlayer from '@/uni_modules/uni-music-player'
import demoSongs from '@/common/demo-music/songs.js'
// 设置播放列表(autoplay:false 只加载不播放,迷你条立即显示)
musicPlayer.setPlaylist(demoSongs, { index: 0, autoplay: false })
// 订阅事件驱动自己的 UI(on() 返回取消函数,页面卸载时统一调用)
const offs = [
musicPlayer.on('change', (e) => { /* 更新当前下标 */ }),
musicPlayer.on('playstate', (e) => { /* 同步播放状态 */ }),
musicPlayer.on('error', (e) => { /* 播放失败提示 */ })
]
// 点击歌曲:在用户手势回调中播放(满足 H5 限制)
function playSong(i) {
musicPlayer.play(i)
}

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 1
赞赏 0
下载 12716143
赞赏 1958
赞赏
京公网安备:11010802035340号