所有功能挂在站点层(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 个小节 |
三个共同点
- 计算全部在浏览器完成,不依赖后端,站点可整包迁移
- 一个功能一个文件,删功能即删文件
- 全部可关,访客不喜欢可以关掉