chore: v1.1.0 - 5项功能优化
This commit is contained in:
190
Code/docs/modification-assessment.md
Normal file
190
Code/docs/modification-assessment.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# 修改评估文档
|
||||
|
||||
> 项目:在线点名抽奖 (PROJ-20260523012)
|
||||
> 评估时间:2026-05-24
|
||||
> 版本:v1.0.0 → v1.1.0
|
||||
> 评估人:前端架构 Agent
|
||||
|
||||
---
|
||||
|
||||
## 修改评估总览
|
||||
|
||||
| 修改项 ID | 修改内容 | 影响范围 | 目标 Agent | 是否需要架构设计 | 难度 | 说明 |
|
||||
|----------|---------|---------|-----------|----------------|------|------|
|
||||
| M001 | 名单编辑功能(删除按钮) | 名单管理模块 + CSS | frontend-coding-agent | ❌ | 低 | 在现有 name-tag 上追加 × 按钮和删除逻辑 |
|
||||
| M002 | 概率后门(每人概率设置) | 抽奖引擎 + 后门模块 + 状态结构 | frontend-coding-agent | ⚠️ 部分 | 中 | 需扩展状态结构、改造 pickOne 加权随机算法、后门面板新增概率输入 |
|
||||
| M003 | 滚动动画改进(左→右滚动 + 快速启动) | 动画模块 + CSS | frontend-coding-agent | ❌ | 中 | 从名字切换改为水平滚动条效果,调整缓动曲线 |
|
||||
| M004 | 弹窗显示中奖结果 | 动画模块 + CSS + HTML 结构 | frontend-coding-agent | ❌ | 低 | 用模态弹窗替代当前 result-area 内联显示 |
|
||||
| M005 | 烟花效果改进(弹窗周围炸开 + 3秒以上) | 动画模块(Canvas 烟花) | frontend-coding-agent | ❌ | 中 | 移除底部上升阶段,改为弹窗位置直接爆炸,延长持续时间 |
|
||||
|
||||
---
|
||||
|
||||
## 详细评估
|
||||
|
||||
### M001: 名单编辑功能(删除按钮)
|
||||
|
||||
- **影响模块**:`NameManager` 模块、CSS(`.name-tag` 样式)
|
||||
- **需要变更**:
|
||||
- `NameManager.renderNameList()`:每个 name-tag 内追加 × 按钮,绑定点击事件
|
||||
- 新增 `NameManager.removeByName(name)` 方法:从 `state.pool` 中移除指定名字,更新计数和列表
|
||||
- CSS 新增 `.name-tag .delete-btn` 样式(小 × 号,hover 高亮,红色)
|
||||
- **依赖关系**:无外部依赖,纯前端 DOM 操作
|
||||
- **风险点**:
|
||||
- 删除后需同步更新 `state.backdoor.mustWinList` 和 `excludeList`(避免引用已删除的名字)
|
||||
- 若当前正在抽奖中(`state.isDrawing === true`),应禁用删除操作
|
||||
- **代码量预估**:~50 行 JS + ~15 行 CSS
|
||||
- **架构设计变更**:不需要。属于现有模块的功能增强。
|
||||
|
||||
---
|
||||
|
||||
### M002: 概率后门(每人概率设置)
|
||||
|
||||
- **影响模块**:`LotteryEngine` 模块、`Backdoor` 模块、`state` 状态结构、后门面板 HTML/CSS
|
||||
- **需要变更**:
|
||||
- **状态扩展**:`state.backdoor.probabilities` 新增字段,结构为 `{ name: weight }` 的对象(权重值 0-100)
|
||||
- **人员对象扩展**:`person` 对象新增 `weight` 字段(默认 1,表示等概率)
|
||||
- **抽奖引擎改造**:`LotteryEngine.pickOne()` 从等概率随机改为**加权随机**:
|
||||
```
|
||||
1. 候选池 = state.pool 副本
|
||||
2. 过滤排除名单
|
||||
3. 若必中名单非空:取交集
|
||||
4. 计算总权重 = Σ(person.weight)
|
||||
5. 随机数 r = Math.random() * totalWeight
|
||||
6. 累加权重找到对应人选(加权随机算法)
|
||||
```
|
||||
- **后门面板**:新增概率设置区域,支持为每个人设置概率百分比(0-100),可输入数值或滑块
|
||||
- **Backdoor.renderChecklists()**:每个名字旁新增概率输入框
|
||||
- **依赖关系**:
|
||||
- 依赖 M001 的删除逻辑(删除人时同步清理概率配置)
|
||||
- 与现有必中/排除名单逻辑共存,需明确优先级:必中名单 > 概率权重 > 排除名单
|
||||
- **风险点**:
|
||||
- 概率总和不为 100% 时的处理策略(建议:按权重比例分配,不强制归一化)
|
||||
- 概率为 0 的人是否等同于排除名单(建议:是,概率 0 的人不参与抽奖)
|
||||
- 后门面板 UI 复杂度增加,需注意滚动区域和响应式
|
||||
- **代码量预估**:~120 行 JS + ~60 行 CSS + HTML 结构变更
|
||||
- **架构设计变更**:⚠️ 部分需要。`state` 数据结构需扩展,`LotteryEngine.pickOne()` 核心算法需改造。需更新 `frontend-architecture.md` 的状态设计和抽奖引擎算法部分。
|
||||
|
||||
---
|
||||
|
||||
### M003: 滚动动画改进(从左到右滚动 + 快速启动)
|
||||
|
||||
- **影响模块**:`AnimationEngine` 模块、CSS(`.roll-area`、`.roll-name` 相关样式)
|
||||
- **需要变更**:
|
||||
- **滚动方式改造**:从当前"中心位置名字切换"改为"水平滚动条"效果
|
||||
- 名字在水平方向上连续滚动,类似老虎机/跑马灯
|
||||
- 使用 CSS `transform: translateX()` 或 Canvas 实现
|
||||
- 滚动方向:从左到右
|
||||
- **速度曲线调整**:
|
||||
- 初始速度要快(建议:初始间隔 20-30ms,即每秒 30-50 个名字切换)
|
||||
- 逐渐减速(缓动函数保持不变或改用更陡峭的 easeOut)
|
||||
- 总时长保持 3.5 秒左右
|
||||
- **CSS 新增**:滚动容器的 overflow hidden、名字项的水平排列样式
|
||||
- **DOM 结构**:可能需要在 roll-area 内新增滚动容器 div
|
||||
- **依赖关系**:
|
||||
- 与 M004 弹窗显示有 UI 交互关系(弹窗弹出时滚动应已停止)
|
||||
- 头像显示区域可能也需要配合调整(头像跟随滚动还是固定居中)
|
||||
- **风险点**:
|
||||
- 水平滚动的性能:大量 DOM 节点滚动可能卡顿,建议使用 transform 而非改变 left 属性
|
||||
- 移动端兼容性:触摸滚动与动画滚动的冲突
|
||||
- 头像与名字滚动的同步问题
|
||||
- **代码量预估**:~100 行 JS + ~80 行 CSS + HTML 结构调整
|
||||
- **架构设计变更**:不需要。属于动画模块内部实现替换,接口不变(`startRollAnimation(winner, callback)` 签名不变)。
|
||||
|
||||
---
|
||||
|
||||
### M004: 弹窗显示中奖结果
|
||||
|
||||
- **影响模块**:动画模块(`AnimationEngine.startRollAnimation` 的 callback)、CSS(弹窗样式)、HTML 结构
|
||||
- **需要变更**:
|
||||
- **新增弹窗 HTML 结构**:在 `#app` 内新增中奖弹窗 div(类似后门面板的遮罩 + 模态框结构)
|
||||
- 遮罩层:全屏半透明黑色
|
||||
- 弹窗内容:中奖人头像(大尺寸)、名字、"恭喜"字样
|
||||
- 关闭按钮或点击遮罩关闭
|
||||
- **CSS 新增**:弹窗遮罩、弹窗容器、动画(弹出缩放 + 淡入效果)
|
||||
- **动画模块修改**:`startRollAnimation` 的 callback 中,从设置 `resultArea` 改为打开弹窗
|
||||
- **交互**:弹窗可点击关闭,关闭后显示原有的 result-area(或直接用弹窗替代 result-area)
|
||||
- **依赖关系**:
|
||||
- 依赖 M003 滚动动画停止后才弹出(时序关系)
|
||||
- 与 M005 烟花效果配合:弹窗弹出时烟花同时开始
|
||||
- 与 M002 概率后门无直接依赖
|
||||
- **风险点**:
|
||||
- 弹窗的 z-index 需高于烟花 Canvas(当前烟花 z-index: 9999),弹窗 z-index 需设为 10001+
|
||||
- 弹窗动画与烟花动画的性能叠加,需注意低端设备
|
||||
- **代码量预估**:~60 行 JS + ~70 行 CSS + ~20 行 HTML
|
||||
- **架构设计变更**:不需要。属于 UI 层变更,不改变模块接口。
|
||||
|
||||
---
|
||||
|
||||
### M005: 烟花效果改进(弹窗周围炸开 + 3秒以上)
|
||||
|
||||
- **影响模块**:`AnimationEngine.fireFireworks()` 方法、Canvas 粒子系统
|
||||
- **需要变更**:
|
||||
- **移除上升阶段**:当前 `Firework` 类有 `'rising'` 状态(从底部升到目标位置),需移除
|
||||
- 烟花直接在目标位置爆炸,不再从底部发射
|
||||
- **爆炸位置**:围绕弹窗位置生成爆炸点
|
||||
- 获取弹窗 DOM 元素的中心坐标
|
||||
- 在弹窗周围一定半径范围内随机生成爆炸点
|
||||
- 爆炸点分布:弹窗的上下左右四个方向
|
||||
- **持续时间**:从当前 4 秒改为 3 秒以上(建议 4-5 秒)
|
||||
- 修改 `endTime = performance.now() + 5000`
|
||||
- **粒子效果优化**:
|
||||
- 增加初始爆炸的粒子数量(更密集)
|
||||
- 可考虑多波爆炸效果(第一波密集,后续逐渐稀疏)
|
||||
- **依赖关系**:
|
||||
- 依赖 M004 弹窗的位置信息(需要弹窗 DOM 元素的坐标)
|
||||
- 与 M003 无直接依赖
|
||||
- 与 M002 无直接依赖
|
||||
- **风险点**:
|
||||
- 弹窗位置动态变化(响应式)时需重新计算爆炸点
|
||||
- 烟花持续 3 秒以上时,粒子数量控制很重要,避免内存泄漏或卡顿
|
||||
- 窗口 resize 时的 canvas 尺寸同步
|
||||
- **代码量预估**:~80 行 JS 修改
|
||||
- **架构设计变更**:不需要。属于动画模块内部实现修改,接口不变(`fireFireworks()` 无参数调用)。
|
||||
|
||||
---
|
||||
|
||||
## 修改项依赖关系图
|
||||
|
||||
```
|
||||
M001 (名单编辑) ────────────────────────────── 独立
|
||||
M002 (概率后门) ─── 依赖 M001 的删除同步逻辑 ─── 需架构设计更新
|
||||
M003 (滚动动画) ────────────────────────────── 独立
|
||||
M004 (弹窗显示) ─── 依赖 M003 滚动停止 ─────── 独立
|
||||
M005 (烟花改进) ─── 依赖 M004 弹窗位置 ─────── 独立
|
||||
```
|
||||
|
||||
**建议实施顺序**:
|
||||
1. **M001** → 名单编辑(最基础,无依赖)
|
||||
2. **M002** → 概率后门(核心逻辑变更,需先完成 M001)
|
||||
3. **M003** → 滚动动画(独立,可与 M004/M005 并行开发)
|
||||
4. **M004** → 弹窗显示(依赖 M003 完成)
|
||||
5. **M005** → 烟花改进(依赖 M004 完成)
|
||||
|
||||
---
|
||||
|
||||
## 总体影响评估
|
||||
|
||||
| 维度 | 评估 |
|
||||
|------|------|
|
||||
| **代码改动量** | 中等(约 400-500 行 JS + 200-250 行 CSS + HTML 结构调整) |
|
||||
| **架构变更** | 仅 M002 需要更新状态结构和核心算法,其余为 UI/动画层变更 |
|
||||
| **测试重点** | M002 加权随机算法的正确性、M003/M005 动画性能、M001 删除边界情况 |
|
||||
| **兼容性影响** | 无新增 API 依赖,保持现有浏览器兼容性 |
|
||||
| **文件变更** | 仅 `index.html` 单文件(符合项目约束) |
|
||||
|
||||
---
|
||||
|
||||
## 目标 Agent 分配总结
|
||||
|
||||
| Agent | 负责修改项 | 工作量 |
|
||||
|-------|-----------|--------|
|
||||
| **frontend-coding-agent** | M001, M002, M003, M004, M005(全部) | 高(5 项全部) |
|
||||
| **test-qa-agent** | 全部 5 项的功能测试 + 性能测试 | 中 |
|
||||
| **doc-gen-agent** | 更新 README 和使用文档 | 低 |
|
||||
| **package-release-agent** | Git 同步 + v1.1.0 版本发布 | 低 |
|
||||
|
||||
---
|
||||
|
||||
*文档版本: v1.0*
|
||||
*创建时间: 2026-05-24*
|
||||
*作者: 前端架构 Agent*
|
||||
Reference in New Issue
Block a user