建站 2026年6月21日 约 2621 字正文

2026-06-21 博客代码改动记录

基于当天 git status 和 diff 整理的一次博客体验改造复盘,记录背景图、目录、卡片、摄影筛选和全局功能面板的调整。

编辑器中的代码和开发工作区

今天先用 git status --short 看了一眼工作区,改动范围比单纯的样式修补要大一些。除了内容目录里的私有文章和照片示例,代码侧主要集中在页面背景、文章阅读、首页卡片、摄影页筛选、全局浮动控制面板,以及对应测试用例。

这次工作区里最显眼的变化有几类:

  • src/components/RandomPageBackground.vuesrc/config/randomBackground.ts 调整了随机背景的来源配置。
  • src/layouts/PostLayout.astro 把文章目录逻辑从页面脚本里拆了出去,改由 Vue 组件接管。
  • src/components/TableOfContents.astro 被移除,同时新增了 src/components/TableOfContents.vue
  • src/components/PostCard.astrosrc/components/HomePhotoCard.astro 和首页展示样式做了卡片信息层级整理。
  • src/pages/photos/index.astrosrc/components/PhotoGrid.astro 增加了摄影标签筛选能力。
  • src/components/FloatingControls.vue 增加了字体模式和更细的特效控制。
  • src/components/SiteModal.astrosrc/components/HomeAnnouncement.astrosrc/config/announcement.ts 补上了公告能力。
  • 测试目录同步更新了文章目录、随机背景、摄影筛选、文章卡片、静态页面背景等覆盖点。

背景图从随机优先改成可控优先

之前随机背景更像是一个直接请求外部图片接口的组件。这样虽然省事,但也带来一个问题:页面首帧、网络状态和第三方接口质量会影响整体观感。今天的调整把背景来源拆成了更明确的配置。

新的思路是先有一个稳定的 static 模式,默认使用站内本地背景图。等以后真的需要外部随机图或自建接口时,再切换到 external-random-apiself-hosted-api。这样做的好处是,页面体验不再被外部接口牵着走。

组件内部也更强调“先有画面,再替换画面”。页面切换时优先显示兜底图,远程图只有在启用对应模式并完成预加载后才替换。这个策略很朴素,但对博客来说很重要:读者打开页面时,稳定比惊喜更优先。

文章目录从内联脚本拆成组件

文章页这次变化很大。原本 PostLayout.astro 里塞了相当多目录控制逻辑,包括滚动监听、章节测量、弹层开关、点击跳转和销毁流程。它能工作,但阅读布局文件时会显得很重。

今天把目录从 TableOfContents.astro 迁移到了 TableOfContents.vue,并在文章页里用 client:idle 加载。这样文章布局只负责把标题、正文、元信息、目录入口拼起来,目录自身的交互状态则交给专门组件管理。

同时,目录数据也收窄为 h2h3 两级。对长文来说,这个层级更接近实际阅读习惯:既能定位章节,又不会把目录变成另一篇文章。

文章信息更像文章信息

文章卡片里原本混着浏览量、热度、阅读时间、分类、字数等信息。今天的调整把列表卡片上的信息压缩为发布日期、分类、字数和访问状态。实时浏览和热度仍然留在文章详情页,但不再挤进每张列表卡片。

这个取舍是合理的。列表页的任务是帮助读者判断“我要不要点进去”,它需要的是标题、摘要、分类、时间和内容体量。浏览量和热度更适合在详情页成为轻量反馈,而不是在列表上抢视觉权重。

新增的 PostMetaIcon.astro 也让这些元信息有了统一图标,不再依赖零散符号。小图标不是装饰,它的作用是让扫描速度更快。

摄影页开始有筛选语义

摄影页这次不只是继续展示图片,而是增加了按标签筛选的入口。photos/index.astro 会从所有照片的 tags 里生成分类按钮,PhotoGrid.astro 给每张照片挂上 data-photo-tags,前端脚本根据按钮切换隐藏或显示卡片。

这是一种很轻的筛选方案,不需要额外路由,也不需要引入状态管理。对当前规模的摄影页来说,这样刚刚好:内容还在静态集合里,交互也足够直接。

全局功能面板继续收拢

浮动按钮里的“视觉设置”改成了更宽泛的“全局功能”。这次新增了字体模式,用户可以在黑体和衬线之间切换;樱花特效强度也从多个按钮改成了滑杆。

这个变化让我觉得整个面板更像一个真正的站点控制台。它不是为了堆功能,而是把那些会影响阅读环境的选项放在同一个地方:字体、特效、文章布局、壁纸模式。

公告也进入站点系统

这轮还新增了公告配置和公告卡片。公告可以出现在首页,也可以进入站点概况弹窗。它的价值不在于“显眼”,而在于给站点一个轻量的运行提示位。

比如后续迁移图床、调整评论策略、说明维护状态,都可以从配置文件里改,不必每次都手动改页面结构。

测试跟着体验一起走

git status 看,测试文件也更新了不少。比较关键的包括:

  • 随机背景与静态页面背景测试
  • 文章目录和阅读增强测试
  • 首页卡片和主题测试
  • 摄影分类筛选测试
  • 受保护文章测试

这些测试说明这次调整不是只改视觉,而是在维护一组页面行为约定。对于个人博客来说,测试不一定要追求覆盖所有细节,但核心交互一旦写进测试,就能避免后面改样式时顺手把行为碰坏。

这次改动留下的方向

今天这轮改造的主线其实很清楚:把体验做得更稳定、更可配置,也更容易继续维护。

背景图从外部随机改成配置驱动,文章目录从布局里抽成组件,卡片信息从热闹变得克制,摄影页开始具备按标签浏览的能力,全局功能面板也从单一视觉开关扩展成阅读环境入口。

这不是一次“加功能越多越好”的更新。它更像是在给博客补骨架:让内容展示、阅读控制、影像浏览和站点提示各自站到合适的位置。之后再继续写文章、发照片、改主题,系统不会那么容易变乱。