Files
online-attendance-lottery/Code/docs/modification-assessment.md

9.9 KiB
Raw Blame History

修改评估文档

项目:在线点名抽奖 (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.mustWinListexcludeList(避免引用已删除的名字)
    • 若当前正在抽奖中(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