视频加载失败

文章中添加音乐播放器

569 字
3 分钟
文章中添加音乐播放器
文章中添加音乐播放器

利用现有组件添加音乐播放器#

依旧可以直接利用 MD 语法在文章中嵌入组件,并且实现默认自动播放。

效果展示(音频源网易云示例)#

未知歌曲
未知艺术家
网易云音乐 · 单曲
0:000:00

使用说明#

直接URL方式#

::music{url="https://example.com/song.mp3" title="歌曲标题" artist="艺术家" cover="封面URL"}

网易云音乐方式#

::music{server="netease" type="song" id="1901371647" title="歌曲标题" artist="艺术家"}

参数说明(基本和主页播放器组件相同)#

参数说明示例
url音乐文件URLurl="/assets/music/song.mp3"
server音乐平台server="netease"
id歌曲IDid="1901371647"
typeID类型(默认song)type="song"
title歌曲标题title="我的歌曲"
artist艺术家artist="艺术家"
cover封面图片URLcover="https://example.com/cover.jpg"
autoplay自动播放(默认true)autoplay="true"
loop循环播放(默认false)loop="true"
volume音量0-1(默认0.7)volume="0.5"

代码实现#

  1. rehype-component-music-player.mjs(组件,src/plugins/) 解析 ::music{…} 语法 支持参数:url、server、id、type、title、artist、cover、autoplay、loop、volume

  2. 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 清理并重新初始化。

  1. music-player.css(样式,src/styles/) 跟随主题色的扁平卡片风,全部用 Tailwind @apply + 主题变量 暗色模式自动适配(不再手写 .dark 覆盖) 加载中/错误/播放中三个状态类

  2. astro.config.mjs(配置)

import { MusicPlayerComponent } from "./src/plugins/rehype-component-music-player.mjs";
// ...
components: {
music: MusicPlayerComponent,
}
  1. 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 />
  1. 样式加载(Markdown.astro / DynamicItemTemplate.astro)
import "@/styles/music-player.css";

和 markdown.css、markdown-extend.styl 放在一起,只在有正文的页面(文章、动态)加载,首页等页面不背这份 CSS。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
文章中添加音乐播放器
https://mstzuomu.space/posts/azuma.zuomu-blog-6/
作者
陌殊途左沐
发布于
2026-08-18
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
基于Firefly主题的列表封面位置改造
技术分享不想让封面挤在侧边?Firefly封面置顶记录
2
评论区回复时表情面板被截断:一次 overflow 裁剪排查实录
技术分享主评论框的表情菜单好好的,一到回复就少了半截?不是 z-index 的锅,是祖先容器的 overflow 在裁。完整复现步骤、根因分析与修复代码。
3
导航栏 UI 改造全记录:卡片边框、悬浮胶囊、三段收拢与 PC 收拢态快捷面板(附完整复现指南)
技术分享一次连续迭代的完整复盘——从卡片边框体系、悬浮胶囊导航,到三段结构拆分、下滑收拢动画,再到 PC 收拢态汉堡的控件快捷面板与"行点击原位弹卡"的两处根因修复,追加 PC 搜索控件图标化与收拢动画卡顿的逐帧诊断修复。每个批次改了哪些文件、为什么这么改、踩了哪些坑(CSS 层序、正圆公式、包含块、Vite 缓存、Playwright headless 动画冻结),附 git 重放与手工重做两条复现路径及验收清单
4
博客性能优化全记录:Lighthouse 报告拆解到帧率根因排查(A–F 六项实战)
技术分享从两份 Lighthouse 对比报告出发,完整记录六项性能优化的排查方法、根因定位与修复代码:字体子集化、封面图尺寸 API、CSS 内联、强制重排归零、以及"只有 Chrome 掉帧"的浏览器设置级根因,附全部可复现命令与工具脚本
5
Win11 资源管理器大小列只显示 KB?开启 KB / MB / GB 自适应显示完整教程
技术分享Win11 详细信息视图的大小列长期以来一律用 KB 显示,4 GB 的文件写成 4,194,304 KB 根本没法看。微软其实已经原生支持自适应单位了,本文给出先更新系统、再用 ViveTool 强制开启(功能 ID 61014711)的完整教程,含回滚方法与常见问题。
随机文章随机推荐

评论区

Profile Image of the Author
陌殊途左沐
热爱是拯救无趣人生的唯一途径
公告
欢迎来到我的博客!这里是左沐的个人空间,分享我的学习、生活和兴趣爱好。希望你能在这里找到有趣的内容,请不要对我的喜好做出评价哦!请勿使用公网访问本站。
分类
访客信息
加载中...
标签
最新动态
站点统计
文章
27
分类
2
标签
47
总字数
48,093
运行时长
0 天
最后活动
0 天前
总浏览量
-
访客数
-
文章目录