第 05 课 | 第五幕:历史与响应式

⏱ 预计阅读 3 分钟 更新于 2026/5/7
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)

第五幕:历史与响应式(第11-12集)

最后的功能完善——让它像一个真正的产品

第11集:记住算过什么

场景:算完就没了?用户想回头看。

  • 历史数据结构:FIFO 队列,最多 10 条,addEntry 自动淘汰最旧
  • localStorage 持久化:JSON 序列化,页面刷新不丢,corrupt 数据静默忽略
  • 历史面板:300ms 滑出动画(width: 0width: 240px + transition
  • 移动端:position: fixed 全屏 overlay,避免挤压计算器
  • XSS 安全:用 textContent 不用 innerHTML——为什么重要(用户输入可能包含 HTML)
  • 老年模式隐藏历史面板(ELDR-05:简化界面,老年人不需要历史记录)
  • 核心概念:localStorage 让浏览器也能"记住"东西

产出文件

  • index.html<aside class="history-panel"> + 历史切换按钮
  • style.css — 历史面板样式 + 滑出动画 + 移动端 overlay
  • app.js — 历史管理(saveHistory / loadHistory / renderHistory / clearHistoryUI)
  • tests/history/history-fifo.test.js — FIFO 队列测试

对应命令/gsd-plan-phase 4/gsd-execute-phase 4


第12集:手机上也能用

场景:电脑上完美,打开手机一看——布局崩了。

  • 响应式断点:desktop (>1024px) / tablet (640-1024px) / mobile (<640px)
  • CSS Media Query:3 套布局,一个 style.css 搞定
  • 移动端适配:grid-template-columns: repeat(4, 1fr) + width: 100% + border-radius: 0
  • 老年模式手机:按钮 64px(比桌面 68px 略小但仍合规),字体 22px/32px
  • 老年模式手机背景纯白 #ffffff,视觉无缝
  • 历史面板移动端 position: fixed 全屏覆盖,z-index: 10
  • 测试在不同宽度下的表现:用浏览器 DevTools 模拟
  • 核心概念:响应式不是缩放,是重新布局

产出文件

  • style.css — 3 断点 media query + 老年模式移动端适配

对应命令/gsd-execute-phase 4(续)