全站可选的跟鼠标像素猫,使用托管脚本 oneko.dhrv.pw,不自托管引擎或皮肤资源。
| 事实 | 权威 | 不要 |
|---|---|---|
| 开/关与皮肤 | src/config.ts FEATURES.oneko |
在布局里写死开关 |
| 类型与配置形状 | src/types.ts OnekoConfig / Features.oneko |
另造 boolean 顶层开关 |
| 脚本挂载与 VT 重建 | src/layouts/BaseLayout.astro |
在各页面再插一份 script |
| 访客隐藏按钮 | src/components/base/Footer.astro 的 data-oneko-toggle |
自写 localStorage 逻辑 |
| 导航避让 | NavBar.astro data-oneko-zone="avoid" |
用 JS 每帧量矩形 |
| 动画引擎与皮肤 | CDN https://oneko.dhrv.pw/oneko.js |
拷贝进 public/ |
在 src/config.ts:
// 开(默认)
oneko: [true, { skin: 'classic' }],
// 关
oneko: false,
// 或
oneko: [false, { skin: 'classic' }],可选 skin 见类型注释;省略时按 classic。完整皮肤列表与署名见 oneko 文档 · Skins 与皮肤 credits。
| 能力 | 设置 |
|---|---|
| 皮肤 | createOneko({ skin }) ← config |
| 跟随光标 | followCursor: true |
| 睡觉 | sleepEnabled: true |
| 气泡 | bubbleEnabled: true |
| 记住位置 | persistPosition: true |
| 季节帽子 | seasonal: true |
| 减少动态 | reducedMotion: 'hide' |
| 喵叫/激光 | meow: false、laserPointer: false |
| 隐藏开关 | 页脚按钮 data-oneko-toggle;引擎用 oneko:hidden 跨标签页记住,重建后仍有效 |
| 避让 | 顶栏 data-oneko-zone="avoid"(开关关闭时属性仍在,无害) |
站点使用 Astro ClientRouter。ClientRouter 换页时会替换页面 DOM,挂在 document.body、且未标 transition:persist 的猫节点会被一并移除。做法:
BaseLayout用is:inline+define:vars输出一小段引导脚本。- 引导脚本通过 CDN 模块的
createOneko创建实例,并记在window.__yublogOneko。 - 每次
astro:page-load检查[data-oneko-cat], #oneko-react;若猫已不在 DOM,先destroy旧句柄(若有),再createOneko重建。页脚data-oneko-toggle由引擎同步,重建后仍可用。
不要对 CDN script 加 data-astro-rerun,也不要用「只注入一次」的全局 flag 阻止重建——换页后猫节点已不在,flag 仍为真会导致猫消失直到整页刷新。
模块职责见上方权威表;站点其它配置和部署见 开发与部署指南。
- 引擎代码 MIT,托管于 oneko.dhrv.pw。
- 皮肤为像素画作品,再分发时请保留 皮肤 credits/安装包内
docs/oneko-skins.md的署名说明。 - 本站仅通过 CDN 引用,不复制皮肤文件进仓库。