🎵 音乐播放器接口

可嵌入任意网站的独立音乐播放器组件。通过 Shadow DOM 完全隔离,不污染宿主页面的样式或脚本。

Shadow DOM 玻璃拟态 QQ 音乐源 歌词同步 响应式 零依赖嵌入

📦 嵌入方式

在任意网页的 <body> 末尾添加一行 <script> 标签:

<script src="https://mapi.zeph72.top/embed.js" data-playlist="813528292"></script>

参数

data-playlist — QQ 音乐歌单 ID(必填,默认 813528292

播放器默认悬浮左下角,圆形按钮可自由拖动(PC 端直接拖,移动端长按 0.6 秒拖)。

示例

<!-- 默认歌单(我的最爱) -->
<script src="https://mapi.zeph72.top/embed.js"></script>

<!-- 指定歌单 -->
<script src="https://mapi.zeph72.top/embed.js" data-playlist="xxxxxx"></script>

🎮 功能说明

界面布局

播放器悬浮于页面右下角:圆形音乐图标(歌单加载完成后显示)→ 点击展开玻璃面板 → 再次点击或点击面板外部空白区收起。

歌曲信息

封面缩略图(48×48,圆角 10px)、歌曲名、歌手名。

进度条

点击任意位置跳转到对应进度。显示当前时间 / 总时长。

播放控制

上一首 · 播放/暂停 · 下一首。中央播放按钮略大。

播放模式(三按钮独立)

列表 — 顺序播放,播完自动停止
单曲 — 单曲循环当前歌曲
随机 — 随机切换,不重复相邻曲目

当前模式高亮显示。切换模式后立即生效。

音量控制

滑块调节音量(默认 100%)。扬声器图标左侧。

歌单列表

面板底部显示完整歌单(最多 30 首)。点击任意歌曲切换。当前播放曲目高亮,自动滚动到列表中间。高度固定 150px,超出可滑动滚动条隐藏。

歌词同步

固定在屏幕底部中央,单行显示。自动解析 LRC 时间轴,随播放进度高亮当前行。无歌词时显示纯音乐。歌词框宽度随文字长度动画过渡。

交互细节

所有按钮无触控高亮(-webkit-tap-highlight-color: transparent)。封面通过 QQ 音乐 CDN 获取(302 跳转)。纯 CSS 过渡动画(0.3s cubic-bezier)。移动端自适应(面板 280px,按钮 42px)。

🔌 API 接口

基础地址:https://mapi.zeph72.top/api.php

所有端点返回 application/json,支持 CORS 跨域。

获取歌单

GET /api.php?action=playlist&id=813528292&limit=10

id — QQ 音乐歌单 ID
limit — 返回数量(默认 10,最大 50

返回数组,每项包含:

{
  "id":     "歌曲 ID",
  "name":   "歌曲名",
  "artist": "歌手",
  "url":    "播放地址(QQ 音乐 CDN)",
  "pic":    "封面参数(拼接至 API Base 获取)",
  "lrc":    "LRC 格式歌词文本"
}

获取封面

GET /api.php?action=pic&id=002hO4rB2EE83U

id — 封面图片 ID(从歌单返回的 pic 字段获取)

302 跳转到 QQ 音乐封面 CDN 直链(T002R300x300M000)。

获取单曲播放地址

GET /api.php?action=url&id=000qXivw4BHSAF

id — 歌曲 ID

返回:{"url": "https://aqqmusic.tc.qq.com/..."}

数据来源

通过内部服务器(love72.top)的加密 API 代理 QQ 音乐,解决境外 IP 限制。播放地址来自 QQ 音乐 CDN 节点。

⚙️ 技术信息

依赖

APlayer.js v1.10.1 — 音频引擎(隐藏实例,不显示原生 UI)。CDN:cdn.jsdelivr.net

隔离机制

所有 DOM 和样式通过 attachShadow({mode:'closed'}) 封装。宿主页面的 CSS 不会渗透播放器,播放器的样式也不会影响宿主。

视觉效果

纯玻璃拟态(backdrop-filter: blur(24px) saturate(200%))。无彩色点缀,只有黑白灰。面板为磨砂玻璃卡片,按钮为半透明磨砂圆。阴影自然柔和。

服务端

PHP 7.4,Nginx(OpenResty)。歌词和播放地址通过腾讯云国内服务器代理。
返回的播放地址有时效性(约 24h),歌单返回的 url 为实时获取。