Files
ChowBox/doc/box.md
王鹏 802b4ba229 fix: 修复 VoiceController Map.of 兼容性 + ExploreController 参数不匹配
- VoiceController: Map.of() -> Collections.singletonMap() 兼容 Java 8
- ExploreController: 补齐 takeoutService.roll() 缺失的 taste/priceRange/allergies 参数

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-08 20:02:27 +08:00

84 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

以下是“吃啥盲盒”开盒动效的详细分镜描述覆盖从点击到展示结果的完整过程可直接交付UI动效设计师和前端开发。
---
## 开盒动效分镜 · 吃啥盲盒
**整体时长**约1.8-2.2秒
**触发动作**:用户点击任一模式入口按钮(外卖盒/冰箱盒/附近盒)
**核心情感曲线**:期待→悬念→惊喜→清晰
**实现方式建议**优先使用Lottie + CSS关键帧动画兼容低端机型可降级为CSS动画序列
---
### 第一幕 · 震动蓄力0ms 400ms
**目标**:传达“盒子里有东西在动”,制造期待。
| 时间 | 元素 | 变化描述 | 缓动 |
|------|------|----------|------|
| 0ms | 点击的按钮/卡片 | 轻微缩放scale 1.0 → 1.05 → 1.0 | ease-out |
| 0ms | 整个盲盒入口 | 出现一圈橙色光晕从中心向外扩散后消失 | ease-out, opacity 1→0 |
| 100ms | 盲盒图标(如🎁) | 开始高频微动:左右摇摆 ±3deg频率先快后慢 | ease-in-out |
| 0-400ms | 屏幕背景(盲盒大厅) | 逐渐变暗至亮度0.6,其余元素后退感 | 线性 |
**配套反馈**:手机轻微震动(调用`wx.vibrateShort` 15ms
---
### 第二幕 · 盒盖开启400ms 1000ms
**目标**:视觉上呈现“盒子被打开”的结构变化。
| 时间 | 元素 | 变化描述 | 缓动 |
|------|------|----------|------|
| 400ms | 盲盒容器(方形盒子) | 盒盖部分分离向上位移动画Y轴偏移 -60rpx同时opacity 1→0 | ease-in |
| 450ms | 盒体内部 | 从缝隙中透出金色光芒,逐渐增强 | ease-out |
| 500ms | 盒体本身 | 向下轻微压缩scaleY 1→0.9→1模拟受力反弹 | ease-out |
| 600ms | 金色光芒 | 蔓延至整个屏幕形成短暂的白屏过渡白色遮罩从中心放射opacity 0→0.8→0 | ease-in-out持续400ms |
| 700ms | 结果承载层(卡片/空状态) | 在光芒最亮时完成挂载,但此时仍被白色遮罩覆盖 | - |
**配套反馈**第二次短震10ms强化“打开了”的触感。
---
### 第三幕 · 展示与定型1000ms 1800ms
**目标**:结果内容华丽登场,信息清晰呈现。
| 时间 | 元素 | 变化描述 | 缓动 |
|------|------|----------|------|
| 1000ms | 白色遮罩 | 开始淡出opacity 0.8→0持续300ms | ease-in |
| 1000ms | 结果卡片(外卖/菜谱/店铺) | 从缩放0.85、Y轴+30rpx开始弹出 | ease-out-back弹性动画 |
| 1100ms | 卡片内商家图片 | 单独从模糊blur 8px变清晰0px持续200ms | ease-out |
| 1200ms | 标题文字(“你抽到的外卖是…”) | 逐字或整行从上方飘入opacity 0→1Y -20→0 | ease-out |
| 1300ms | 评分/距离等次要信息 | 阶梯式出现每组延迟50ms | ease-out |
| 1500ms | 底部操作按钮 | 从下方滑入Y +40→0opacity 0→1 | ease-out |
| 1600ms | 彩带动效(可选) | 短暂彩色纸屑从卡片背后喷射3-5片 | 物理抛物线,随机旋转 |
**配套反馈**:手机长震一次(`wx.vibrateLong`)或播放轻快“叮”音效(需音频资源)
---
### 各模式动效差异点
| 模式 | 第二幕盒内光芒颜色 | 第二幕溅射粒子 | 第四幕彩带 |
|------|-------------------|---------------|-----------|
| 外卖盲盒 | 橙色→暖黄 | 迷你外卖车图标飘出 | 外卖袋emoji纸屑 |
| 冰箱盲盒 | 绿色→浅绿 | 蔬菜粒子(🥬🍅) | 餐具emoji纸屑 |
| 探店盲盒 | 紫色→粉金 | 地图标记气泡冒起 | 星星emoji纸屑 |
---
### 降级策略(性能受限时)
- 移除粒子与彩带,仅保留盒盖位移+光芒过渡+卡片弹性动画。
- 所有动画时长缩短至1.2秒弹性缓动改为普通ease-out。
- 关闭震动序列通过API判断手机性能或用户设置
---
### 开发关键参数
- **Lottie JSON 尺寸**控制在80KB以内帧率30fps。
- **CSS 动画**:使用`transform``opacity`开启GPU加速`will-change`)。
- **遮罩过渡**:使用`page-mask`绝对定位覆盖z-index分层。
- **依赖资源**:音频文件(.mp3, 5KB以内震动序列图片预加载结果卡片图提前加载
---