可嵌入任意网站的独立音乐播放器组件。通过 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)。
基础地址: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 为实时获取。