GooseBlog 升级日志 2026-07-27
一次性十几个功能的更新,外加一堆 bug 修复。按模块记录。
CSS 模块化
之前所有样式挤在 index.html 的 <style> 里 1170+ 行。拆成了 5 个独立 CSS 文件:core.css(变量/重置)、layout.css(侧栏/顶栏/响应式)、article.css(文章列表/详情/归档)、components.css(目录球/调色板/链接卡片)、widgets.css(图片查看器/分享球/开屏动画)。模块之间职责分离,改样式不用翻山越岭。
代码高亮(Prism)
引入 Prism.js,prism-tomorrow 暗色主题。bootcdn 加载,自动识别 language 类名,路由切换后自动重新着色。支持 autoloader 按需加载语言包。
国际化(i18n)
双向语言支持。src/js/i18n-core.js 同步加载,暴露全局 window.__() 给所有非模块脚本。侧栏导航、顶栏标题、分享球、代码复制、Toast、右键菜单、热力图、目录球、项目/关于/归档/友链页面——全部硬编码中文替换为 i18n key 调用。侧栏底部有语言切换(后移到顶栏月亮按钮旁),localStorage 持久化。
切语言时同步更新视图模式标签条、AI 屏蔽按钮、标签展开/收起——不需要页面刷新。
开屏动画
首次访问首页时,全屏深色遮罩 + "GooseBlog" SVG 描边画出(2.6s 由短到长)+ 底部 loader 条。后台组件正常加载,内容就绪后遮罩淡出,文章卡片以弹簧缓动(cubic-bezier 0.34 1.56 0.64 1)从小到大入场。遮罩最短展示 2.8s,入场提前 50ms 与淡出重叠。只播放一次,内部导航不重复。
调色板
侧栏底部小按钮,14 个预设色 + 自定义取色器。选了蓝全站变蓝,选了绿全绿。所有品牌色都走 CSS 变量,之前硬编码的 #6d28d9 / #7c3aed 全部清空。localStorage 存用户偏好。
友链板块
侧栏新增"友链"导航,/friends 页网格卡片展示(头像、名称、描述)。后台管理加了标签切换(文章 / 友链),可以直接加/删友链。后端 Worker 加了 POST/DELETE /api/admin/friends 端点。
图片查看器
文章图片点击弹出全屏遮罩大图,点图片/空白/叉号或 ESC 关闭。
悬浮目录
文章页右下角圆球,展开 h2/h3 标题大纲,点击平滑跳转。
分享海报
右下角分享悬浮球,含"复制链接"和"生成海报"。海报方案:html2canvas + QuickChart 二维码,一次下载 PNG。踩坑记录:Canvas 硬画 CORS 堵死 → SVG foreignObject 自闭合爆炸 → html2canvas proxy 最终方案。
链接卡片
文章里裸链接自动拉 OG 标签渲染预览卡片,后端 /api/link-preview 端点抓取 title/description/image。
代码块复制
代码块鼠标悬停右上角出现复制按钮,点一下复制整块代码,按钮变绿反馈 2s。
前后篇导航
文章底部显示上一篇/下一篇标题和摘要,点击跳转。
文章进步体
正文也从系统字体换成了 DingTalk JinBuTi,全站字体统一。
品牌色硬编码清零
扫描全站 CSS 和 JS,所有 #8b5cf6、#6d28d9、#7c3aed、#4c1d95 实例清干净——只保留 :root 里的初始变量定义。color-picker 新增 --brand-rgb 变量同行更新。选橘色不会再露出紫色残影。
修复清单
- 热力图 hover transform scale 导致鼠标指针闪烁 → 关掉
- 前进后退内部栈和浏览器历史不同步 → 改原生 history.back/forward
- Safari 工具栏遮挡 → 100dvh 反复测试后定稿
- 广告拦截器干掉按钮 → 类名去广告关键词
- Worker 部署需手动激活(铁律 1)+ wrangler hash 缓存跳过(铁律 5)
- 友链点击后侧栏高亮停留首页 → 补 NAV_MAP
- 英文模式下落叶飘落/点击特效/调色板/屏蔽AI → 加 data-i18n
- 两处中文乱码:CSS 注释 + i18n 字典
- 两个悬浮球大小不统一 → 统一 44x44 / 40x40
- 图片点击不关闭 → 加 img 到关闭判定
- 封面图底部渐变和标题融合、竖屏适配
- 语言切换后分享球文字不更新 → 加 langchange 监听
- 海报下载 html2canvas CORS + foreignObject + proxy 曲折选择
- 导航高亮(友链、admin)
总结
博客从纯文字阅读器变成了一个勉强能用的多功能页面。功能代码量不大,踩坑密度极高。P.S. 海报下载功能让一个 CV 工程师体验了从 Canvas 到 foreignObject 到 html2canvas 再到 proxy 的完整前端"进化树"。
由workbuddy编写
- 标题: GooseBlog 升级日志 2026-07-27
- 作者: Goose
- 创建于 : 2026-07-27 16:17:21
- 更新于 : 2026-07-27 16:29:45
- 链接: https://blog.goose.cc.cd/posts/gooseblog-update-20260727/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。