所有功能挂在站点层(source/js、source/css、source/js/inject),主题模板只提供骨架。

外观与交互

功能 实现
美化设置面板 Winbox 浮窗,默认 1000×620,尺寸存 localStorage.meihuaSize,最小化挂到右上角齿轮下方,点面板外关闭(KEEP 白名单)
面板状态 存 themeColor、themeCustomColor、cursorOn、rippleOn、bgFilterOn、transNum、frostNum、nekoOn
鼠标指针 CURSOR_DOT = 10,圆点与热区同源推导;CURSOR_TRAIL = false
氛围动效 snow.js、fireflies.js、festival.js、ripple.js、typewriter.js、console-art.js,均可关
页脚爱心 SVG clipPath 裁心形,内嵌 9 根柱,峰值 0.30→1.00 向两侧递减,延迟错开 0.05s
恋爱天数 love-days.js,只改 LOVE_START

音乐

功能 实现
音乐馆 /music/ 单张公开歌单,走 /api/music 代理(qq_pl、qq_url、qq_lyric、qq_search),绕开 CORS
播放核心 music-bus.js 全站唯一 <audio>,其余模块发指令,不各自建播放器
跨页续播 导航前写 sessionStorage.fomalPlayerResume(曲目、秒数、队列、模式,队列上限 300),新文档 60ms 后读回并 seek
防双播 新标签页会复制 sessionStorage,用 opener + BroadcastChannel 握手只留一份
状态快照 记录用户意图 wantPlaying,不读 audio.paused(卸载时浏览器会自动 pause)
侧栏播放器 24s 换一言,悬停卡片(含上方 16px 热区)浮出播放器与歌词
迷你胶囊 常驻左下角,显示歌名与滚动歌词

工具页

页面 实现
/thread/ 纯 HTML 表格,thread-table.js 做搜索过滤、分类切换、表头吸顶(--tc-top)
/macro/ macro-tpls.js 存 42 个模板(window.MACRO_TPL),macro-gen.js 负责表单、实时生成、高亮、复制下载
/nav/ 手写 HTML 卡片,CSS 计数器,无第三方组件
/site/time/ 主题渲染 DOM,timeline-archive.js 后处理,以 .tl-ready 为开关
/tags/ 主题 ECharts 出图,stats.js 在浏览器端重写配色

互动与内容

功能 实现
友链随机 flink-shuffle.js 按 .site-card-group 分组打乱,组间不混
友链置顶 _data/link.yml 写 pin: N,先占位,其余洗牌填空;总开关 flink_shuffle
快速申请 kslink.js 把模板填进 Twikoo 输入框,适配新版 tk-input 类名
留言板 Twikoo,评论区懒加载
二维码灯箱 wechat-qr.js 同页弹层,不跳转、不新开标签
AI 助手 scripts/ai-chat-inject.js 构建期注入,请求走同源 /api/chat/completions,Key 只在服务端
PDF 预览 自定义标签,底层 pdf.js
1
{% pdfview /assets/drawings/xxx.pdf 图纸 F3.6061.0074RM %}

| 加密文章 | unlock-secret.js 补解锁按钮,接管点击、回车、移动端三条路径,解密后补做目录与懒加载 |

基础设施

功能 实现
Service Worker 离线预缓存 + 按资源类型分流,单 fetch 监听、单次 respondWith
线路探测 请求 站点域名/?__pr=随机串,由 sw.js 接住测回源延时,失败只影响侧栏徽标
侧栏日历 aside-calendar.js + lunar.js,农历、节气、节日本地计算
移动端抽屉 mobile-drawer.css 独立样式表,13 个小节

三个共同点

  1. 计算全部在浏览器完成,不依赖后端,站点可整包迁移
  2. 一个功能一个文件,删功能即删文件
  3. 全部可关,访客不喜欢可以关掉