ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ClawHub 首页 Hero 老虎机彩蛋:触发契约、赔率控制与实现原理全解析

ClawHub 首页 Hero 老虎机彩蛋:触发契约、赔率控制与实现原理全解析 后端前端AI 技能AI 插件搜索引擎【免费下载链接】clawhubSkill Plugin Registry for OpenClaw项目地址https://gitcode.com/gh_mirrors/mo/clawhub点击查看免费下载本文以 ClawHub 仓库中的回归说明 specs/regression-notes/2026-04-29-hero-slot-easter-egg.md 为主线完整还原首页 hero 区老虎机彩蛋slot machine easter egg从引入、调参、可访问性改造到被移除的完整生命周期并结合仓库中仍然保留的样式源码与 UI 契约测试深入剖析其触发判定、转轮节奏、赔率控制与特效呈现的底层实现。读完本文你将掌握这套交互的精确契约参数800ms 三连击、1200/1800/2400ms 停轮、1/25 与 1/100 双重赔率、它与键盘可访问性设计的关系以及彩蛋类交互在 React 前端中的典型实现与回归测试思路。一、彩蛋背景一次社区标签三连击的产品彩蛋ClawHub 是面向 OpenClaw 生态的 Skills Plugin Registry技能与插件注册中心其首页 hero 区在 2026 年 4 月曾经内置过一个隐藏交互当用户在 hero 区域的特定标签上快速点击三次时标题会切换成一台老虎机以滚动字词的形式展示隐藏文案命中特定组合时触发彩蛋特效。根据回归说明记录该彩蛋最初由 Val Alexander 于 2026-04-18 通过提交91c7e44提交信息为feat: slot machine Easter egg on hero label triple-click引入触发载体是当时首页 hero 中存在的社区标签community label。其设计目标很典型在不干扰主要导航与搜索路径的前提下为常访用户提供一个低发现成本、高趣味性的隐藏交互同时用三连击 时间窗的判定方式避免误触。二、触发契约800ms 时间窗内的三次激活回归说明给出的核心触发规则为Activate the hero headline button three times within 800ms to trigger the slot-machine headline.即用户必须在800ms 时间窗口内对触发按钮完成三次激活老虎机标题才会启动。这是一个典型的多击multi-tap / multi-click判定模式三次激活之间是累计计时而非各自独立计时即从第一次激活开始计算 800ms 窗口超过 800ms 才完成三次点击的序列会被判定为无效并重置计数判定载体从最初的社区标签演变为后来的hero 标题内按钮见下文可访问性改造一节。这类判定在实现上通常依赖一个计数器加时间戳数组每次激活时记录performance.now()过滤掉窗口外的旧时间戳后判断剩余数量是否达到三次。回归说明中后续提交fec5db7专门补充了timer 与 interval 在组件卸载unmount时的清理逻辑这也印证了该彩蛋在实现上确实包含计时器判定窗口与动画间隔转轮滚动两类异步资源二者都必须在卸载时妥善释放避免组件销毁后仍继续触发状态更新或动画循环。三、转轮节奏1200ms / 1800ms / 2400ms 三段停轮触发成功后标题进入老虎机滚动状态。回归说明明确规定三组转轮的停止时间转轮序号停止时间点自触发起第一组转轮1200ms第二组转轮1800ms第三组转轮2400ms三组转轮以600ms 的间隔依次停稳形成逐位揭晓的节奏感。仓库 src/styles.css 中至今保留着这套动画的完整样式定义在约 L21736-L21852 与 L25366-L25482 存在两组几乎相同的定义块注释均为/* Slot machine easter egg */可以清晰还原其视觉实现.home-v2-headline-slots老虎机标题的容器设置min-height: 1.15em防止滚动期间布局跳动.home-v2-slot-reel单组转轮使用JetBrains Mono等宽字体与 800 字重min-width: 180px保证滚动过程文本宽度稳定旋转态.home-v2-slot-reel.spinning内部字词挂载home-v2-slotBlur动画0.12s steps(1) infinite以模糊 ↔ 清晰的步进闪烁模拟高速滚动停稳态.home-v2-slot-reel:not(.spinning)挂载home-v2-slotLand落地动画0.3s cubic-bezier(0.34, 1.56, 0.64, 1)通过translateY下坠 scale回弹的贝塞尔曲线制造落定的物理感。其中steps(1)与cubic-bezier(0.34, 1.56, 0.64, 1)是关键细节前者用离散步进制造复古老虎机的顿挫感后者超出 1 的贝塞尔纵坐标1.56产生过冲回弹两者共同构成了这套彩蛋廉价但讨喜的动效质感。四、赔率控制1/25 总 Jackpot 与 1/100 Hack Jackpot彩蛋若只是随机滚动文案并无难度本设计的精妙之处在于显式的赔率控制。回归说明给出两条硬性参数Non-jackpot spins reroll accidental triples so jackpot odds stay controlled. Jackpot odds are 1/25 overall. Hack jackpot odds are 1/100 overall.即总体 Jackpot 概率为 1/25。这里的总体指每次完整老虎机旋转一次三组转轮全部停稳产生一次 Jackpot 结果的概率为 1/25Hack特殊水生主题Jackpot 概率为 1/100是稀有中的稀有关键的机制性约束非 Jackpot 的旋转如果偶然滚出了三连相同字词accidental triples会被强制重新滚动reroll直到结果不是三连为止。这条reroll 意外三连规则是赔率控制的精髓。若不重滚字词池中任何三个相同字词的组合都会天然形成一个伪 Jackpot使真实 Jackpot 概率被稀释并偏离 1/25 的设计值。通过把三连这一视觉上的中奖形态完全收归 Jackpot 机制独占开发团队保证了视觉反馈与概率语义一致——用户看到三连 真中了 1/25 的 Jackpot概率可控、可测试——1/25 与 1/100 可以直接写成确定性单测无需依赖真实随机数后续调参成本低——提交cb750112026-04-18同样由 Val Alexander 提交正是把 Jackpot 概率从早期版本统一调整为任意 Jackpot 1/25、Hack Jackpot 1/100说明概率常量被集中管理可以单点修改。五、结果呈现五彩纸屑、水生 Hack 特效与冷却窗口彩蛋的结果分为获胜与未获胜两类各自有独立的展示时长与冷却时间结果类型展示时长冷却时长特效Jackpot 获胜10s18s全屏五彩纸屑confettiHack 获胜使用水生特效未获胜普通滚动2.4s3s无特殊特效回归说明原文Wins fire confetti; Hack wins use the aquatic Hack-specific effect. Wins display for 10s and cool down for 18s; losses display for 2.4s and cool down for 3s.仓库样式源码中可以看到对应特效的完整定义.home-v2-confettiposition: fixed; inset: 0; z-index: 9999; pointer-events: none——全屏覆盖、置顶、不拦截鼠标事件的五彩纸屑层.home-v2-headline-jackpot挂载home-v2-jackpot动画0.5s ease-out缩放轨迹 1 → 1.08 → 0.97 → 1 的脉冲同时.home-v2-headline-jackpot .home-v2-slot-word被强制渲染为金色#ffd93d并叠加两层金色光晕text-shadow20px/40px 模糊形成中大奖的视觉高亮.home-v2-headline-hackHack 获胜时字词切换为水青色#22d3ee使用三层光晕24px 主光、48px 副光、外加黑色下投影连标题中的分隔点.home-v2-sep也会变成水色描边并发光——这就是文档中所说的aquatic Hack-specific effect水生特效的文字侧.home-v2-hack-lobster水生特效的另一半一个 280×280 的龙虾图形从画面中央以home-v2-lobsterReveal动画1.2s时长、0.3s延迟、从scale(0) rotate(-30deg)弹入、最终透明度 0.12、叠加两层青色 drop-shadow淡入标题背后z-index: -1作为水生主题的点睛元素。展示/冷却双窗口的设计让彩蛋具备节奏感10s 的展示期足够用户看清结果18s 的冷却期防止连刷稀释稀有度普通结果 2.4s 展示 3s 冷却则保证没中的体验不拖沓。从实现角度看这对应一组状态机idle → spinning → settling → win/loss display → cooldown → idle任何时刻只允许一个状态fec5db7提交补上的 timer/interval 清理正是这个状态机在组件卸载时的收尾保障。六、可访问性改造从社区标签到键盘可访问按钮回归说明中明确提到一个 PR 方向This PR proposes moving the trigger from the removed community label into a keyboard-accessible button inside the hero headline while preserving the same slot timing and odds.即把触发载体从被移除的社区标签迁移为hero 标题内部一个键盘可访问的按钮同时完整保留上文的老虎机时间节奏与赔率参数。这是一次典型的无障碍a11y改造语义上由非语义的标签label改为真正的button元素屏幕阅读器可以识别其为可交互控件键盘操作按钮必须可获得焦点focusable回车/空格可触发并通过:focus-visible提供可见的焦点环契约不变800ms 三连击判定、三段停轮、双重赔率、特效与冷却全部沿用不因入口变化而改变玩法。仓库 src/styles.css 中保留的.home-v2-headline-trigger样式约 L25269-L25279与此方向完全吻合.home-v2-headline-trigger { all: unset; /* 重置浏览器默认按钮样式融入 hero 标题 */ display: flex; width: 100%; cursor: pointer; border-radius: var(--oc-radius-control); } .home-v2-headline-trigger:focus-visible { outline: 2px solid var(--hv2-accent); /* 键盘焦点可见环 */ outline-offset: 8px; }从源码结构看.home-v2-headline-trigger通过all: unset将按钮视觉完全隐形嵌入标题排版同时用cursor: pointer保留鼠标可发现性focus-visible焦点环则保证纯键盘用户在 Tab 导航时能看到明确的操作目标。这组样式与回归说明中keyboard-accessible button inside the hero headline的提议一一对应可以推断它正是该 PR 实现时留下的产物。七、彩蛋的移除6c0163f与 typeahead 特性回归说明记录的最后一次变更The easter egg was removed fromsrc/routes/index.tsxin commit6c0163fby Patrick Erichsen on 2026-04-28 as part offeat: add skills plugins search typeahead.2026-04-28Patrick Erichsen 在实现skills/plugins 搜索 typeahead特性时从 src/routes/index.tsx 中移除了彩蛋代码。这一点在当前源码中可以得到验证现在首页 hero 的标题是一个静态元素h1 classNamehome-v2-headline oc-hero-title span classNamehome-v2-action-word home-v2-static-headlineClaws for your Claws/span /h1见 src/routes/index.tsx不再包含任何老虎机组件或三连击逻辑。同时需要注意虽然 TSX 中的彩蛋逻辑已被移除但src/styles.css中整套老虎机样式.home-v2-headline-slots、.home-v2-slot-reel、home-v2-slotBlur/home-v2-slotLand/home-v2-jackpot关键帧、金色/水色字词、龙虾与五彩纸屑层以及.home-v2-headline-trigger按钮样式仍然保留在样式表里两组几乎相同的定义块分别位于约 L21736-L21852 与 L25366-L25482。从仓库现状推断这些属于逻辑移除后遗留的样式定义也可能是为后续重新引入预留的资产——源码层无法进一步确证意图但这份回归说明本身为将来任何恢复彩蛋的尝试提供了完整的契约文档。八、UI 契约测试对 hero 交互性的隐式约束彩蛋虽然被移除但它留下的一个设计约束仍被测试守护着。仓库中的 UI 契约测试 src/tests/ui-design-contract.test.tsrequires the static hero and canonical home catalog用例约 L407-L421对首页 hero 作出了如下断言expect(homeSource).toContain(home-v2-headline oc-hero-title); expect(homeSource).toContain(span classNamehome-v2-action-word home-v2-static-headline); expect(cssRule(css, .home-v2-headline)).not.toMatch(/(?:cursor: default|user-select: none)/); expect(cssRule(css, .home-v2-static-headline)).toContain(color: var(--oc-accent-primary)); expect(css.lastIndexOf(.home-v2-static-headline)).toBeGreaterThan( css.lastIndexOf(.home-v2-action-word), );其中两条值得注意.home-v2-headline不得包含cursor: default或user-select: none——这保证标题区域保持可交互、可选中的表观特征为将来把标题再次改造成可点击触发载体留出契约空间静态标题.home-v2-static-headline的声明必须出现在.home-v2-action-word之后——约束样式表中的层叠顺序确保静态文案的颜色--oc-accent-primary真正生效而不是被动态字词样式覆盖。这类契约测试contract test的思路值得借鉴不直接测试已被移除的功能而是把与功能相关的样式与 DOM 结构约束固化下来任何未来改动如果破坏 hero 的可交互性或层叠顺序都会在 CI 中立即失败。这与回归说明记录曾经存在过的行为的目的互为表里——说明是给开发者读的文档测试是给 CI 读的文档。九、同族彩蛋参照Footer 与 Bring-Skills 区块的揭示机制ClawHub 的彩蛋并非孤例。与 hero 老虎机同源、且当前仍在代码中存活的还有两类揭示式reveal彩蛋可作为横向参照页脚彩蛋src/components/Footer.tsxFooterEasterBackdrop使用useEffect注册滚动监听通过requestAnimationFrame计算--footer-easter-reveal0隐藏、1完全揭示做滚动视差同时用onPointerMove/onPointerLeave写入--footer-easter-x/y/intensity变量驱动 ASCII 字符发光并在prefers-reduced-motion: reduce下直接跳过动画、强制完全揭示——这是一个值得抄作业的无障碍细节Bring Your Own Skills区块src/components/HomeBringSkillsSection.tsx注释明确写着 Same composition as the footer easter egg复用了静态图片栈 指针追踪 ASCII 发光的组合配合aria-hiddentrue将装饰层对辅助技术隐藏。两处实现都展示了同一种彩蛋设计范式装饰层与交互层分离——装饰层用 CSS 变量驱动、aria-hidden屏蔽、pointer-events放行交互层用真实可聚焦控件承载。hero 老虎机彩蛋如果按回归说明中的 PR 方向恢复也应遵循同一范式触发按钮负责语义与键盘操作转轮与纸屑纯视觉层不参与交互语义。十、从回归说明提炼的验收清单回归说明的Expected behavior一节本质上是一份可直接转换为测试用例的验收清单。整理如下供任何计划恢复或重建该彩蛋的团队直接采用#验收项契约值1触发hero 标题按钮在 800ms 内被激活三次2停轮节奏三组转轮分别于 1200ms、1800ms、2400ms 停止3三连独占非 Jackpot 旋转若偶然滚出三连强制重滚4总 Jackpot 概率1/255Hack Jackpot 概率1/1006获胜特效全屏五彩纸屑Hack 获胜叠加水生特效7获胜节奏展示 10s冷却 18s8未获胜节奏展示 2.4s冷却 3s9资源安全定时器与动画 interval 在组件卸载时清理小结Hero 老虎机彩蛋从 2026-04-18 引入、两次调参与加固cb75011赔率、fec5db7资源清理、到 2026-04-28 随 typeahead 特性被移除生命周期不过十天却沉淀了一份高质量的回归说明。它的价值不在彩蛋本身而在于把一套隐藏交互的全部可验证参数触发窗口、停轮节奏、双重赔率、三连重滚规则、展示/冷却双窗口以文档形式固化下来——即使代码已删任何人仍可据此精确重建并有 src/styles.css 中遗留的完整样式定义与 src/tests/ui-design-contract.test.ts 中的契约测试作为实现锚点。对任何做产品化前端尤其是带彩蛋、动效与隐藏交互的落地页的团队来说这套契约文档 残留样式 契约测试的组合就是隐藏功能可维护性的最佳示范。赞分享后端前端AI 技能AI 插件搜索引擎【免费下载链接】clawhubSkill Plugin Registry for OpenClaw项目地址https://gitcode.com/gh_mirrors/mo/clawhub点击查看免费下载相关推荐ClawHub 特性开关实践基于 Krill Switch 的首页文案试点与 SSR 评估契约ClawHub 特性开关实践基于 Krill Switch 的首页文案试点与 SSR 评估契约 ClawHub 是 OpenClaw 的 Skill Pl后端前端AI 技能AI 插件搜索引擎ClawHub 详情页设计迭代Skill/Plugin 详情页视觉契约与前端实现实践ClawHub 详情页设计迭代Skill/Plugin 详情页视觉契约与前端实现实践 本篇基于 ClawHub 仓库中保留的设计迭代备忘录 specs/plu后端前端AI 技能AI 插件搜索引擎如何在桌面上拥有一个完全私密的AI助手Open WebUI Desktop终极指南如何在桌面上拥有一个完全私密的AI助手Open WebUI Desktop终极指南 想象一下你正在处理一份重要文档突然需要AI的帮助来润色一段文字。传统的后端AI 应用NLP上一篇3分钟掌握EdgeGPT网页上下文注入让AI轻松读懂任何网页的终极指南下一篇ElastAlert 终极指南HTML 告警模板定制与动态字段注入技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表