文章中添加音乐播放器
- 1导航栏 UI 改造全记录:卡片边框、悬浮胶囊、三段收拢与 PC 收拢态快捷面板(附完整复现指南)
- 2博客性能优化全记录:Lighthouse 报告拆解到帧率根因排查(A–F 六项实战)
- 3Firefly 博客实战:从零搭建任意设备可用的发布台(Vercel + GitHub API)
- 4评论区回复时表情面板被截断:一次 overflow 裁剪排查实录
- 5Firefly 博客实战:给文章页加阅读进度条与圆环百分比
- 6Firefly 博客接入友链朋友圈:从零开始的完整部署教程
- 7从零开始搭建个人图床
- 8文章中添加音乐播放器本文
- 9基于Firefly主题的列表封面位置改造
- 10基于rehype的博客PDF嵌入组件实现
- 11Twikoo评论系统部署踩坑记录:Vercel域名无法访问的解决之路
- 12这是我的第一篇BLOG

利用现有组件添加音乐播放器
依旧可以直接利用 MD 语法在文章中嵌入组件,并且实现默认自动播放。
效果展示(音频源网易云示例)
使用说明
直接URL方式
::music{url="https://example.com/song.mp3" title="歌曲标题" artist="艺术家" cover="封面URL"}网易云音乐方式
::music{server="netease" type="song" id="1901371647" title="歌曲标题" artist="艺术家"}参数说明(基本和主页播放器组件相同)
| 参数 | 说明 | 示例 |
|---|---|---|
url | 音乐文件URL | url="/assets/music/song.mp3" |
server | 音乐平台 | server="netease" |
id | 歌曲ID | id="1901371647" |
type | ID类型(默认song) | type="song" |
title | 歌曲标题 | title="我的歌曲" |
artist | 艺术家 | artist="艺术家" |
cover | 封面图片URL | cover="https://example.com/cover.jpg" |
autoplay | 自动播放(默认true) | autoplay="true" |
loop | 循环播放(默认false) | loop="true" |
volume | 音量0-1(默认0.7) | volume="0.5" |
代码实现
-
rehype-component-music-player.mjs(组件,
src/plugins/) 解析 ::music{…} 语法 支持参数:url、server、id、type、title、artist、cover、autoplay、loop、volume -
music-player-script.js(脚本,
src/plugins/) 音频播放控制(播放/暂停/进度/音量) Meting API 集成(网易云、QQ音乐等,三级回退) 多播放器互斥暂停、自动播放处理 切页时自动暂停并重新初始化(见下方事件说明)
切页事件的坑:站点用的是 Swup 4 +
@swup/astro,它有个兼容层会把 Swup 钩子转成 astro 风格事件派发——content:replace前触发astro:before-swap,page:view触发astro:page-load。这两个才是实际会触发的事件;Swup v3 时代的swup:contentReplaced/swup:willReplaceContent在 4.x 里根本不派发, 写了也白写(会表现为:swup 切进文章时播放器不初始化、切页后音乐不停)。 脚本里监听astro:before-swap暂停、astro:page-load清理并重新初始化。
-
music-player.css(样式,
src/styles/) 跟随主题色的扁平卡片风,全部用 Tailwind@apply+ 主题变量 暗色模式自动适配(不再手写 .dark 覆盖) 加载中/错误/播放中三个状态类 -
astro.config.mjs(配置)
import { MusicPlayerComponent } from "./src/plugins/rehype-component-music-player.mjs";// ...components: { music: MusicPlayerComponent,}- MusicPlayerManager.astro(脚本接入,
src/components/features/)
对齐框架里 GithubCardManager 的模式,一行副作用导入脚本,由 Layout 统一渲染:
---// 文章内嵌音乐播放器客户端管理器(::music 指令)---<script> import "@/plugins/music-player-script.js";</script>Layout.astro 里引入并渲染这个组件即可,不再需要手写 <link> 和 <script src>:
import MusicPlayerManager from "@components/features/MusicPlayerManager.astro";// ...<MusicPlayerManager />- 样式加载(
Markdown.astro/DynamicItemTemplate.astro)
import "@/styles/music-player.css";和 markdown.css、markdown-extend.styl 放在一起,只在有正文的页面(文章、动态)加载,首页等页面不背这份 CSS。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!




