📝 Todo 教学应用

纯 HTML + CSS + JS 前端练手项目 · 含完整教学注释

HTML5 CSS3 JavaScript ES6+ ARIA 无障碍 MVC 模式

📂 项目文件结构

📄
index.html
2.9 KB · 页面结构
🎨
style.css
9.5 KB · 样式表
app.js
13.1 KB · 核心逻辑

✨ 功能特性

➕ 新增待办(Enter 提交)
🗑️ 删除待办(3秒撤销)
✅ 标记完成(复选框)
✏️ 编辑待办(Enter保存 / Escape取消)
🔍 筛选:全部 / 未完成 / 已完成
🔢 显示剩余数量
💾 localStorage 持久化(刷新不丢)
♿ ARIA 无障碍支持
📱 响应式设计(手机 + 桌面)
⌨️ 键盘可操作

🧪 测试清单(17项全部通过 ✅)

#测试项结果
1空输入点击添加 → 提示「内容不能为空」
2输入内容后按 Enter → 新条目出现,输入框清空
3点击复选框 → 文字划线变灰,剩余数减少
4再次点击复选框 → 恢复未完成状态
5点击编辑按钮 → 文字变成可编辑状态
6编辑后按 Enter → 保存修改,退出编辑
7编辑后按 Escape → 取消修改,恢复原内容
8点击删除 → 条目消失,底部弹出撤销条
9点击撤销 → 条目恢复
10不操作等待 3 秒 → 撤销条自动消失
11筛选「未完成」→ 只显示未完成项
12筛选「已完成」→ 只显示已完成项
13筛选「全部」→ 显示所有项
14刷新页面 → 数据还在,不丢失
15手机尺寸查看 → 布局自适应
16用 Tab 键操作 → 所有按钮可聚焦
17屏幕阅读器朗读 → 能读出列表项和状态

🎯 5 个进阶练习

⭐⭐⭐ 难度 3/5
练习 1:拖拽排序

让待办项可以拖拽调整顺序,拖完后保存到 localStorage。学习点:drag/drop 事件、Array.splice() 移动元素

⭐⭐⭐ 难度 3/5
练习 2:分类标签

给每个待办添加标签(如「工作」「学习」「生活」),支持按标签筛选。学习点:数据模型扩展、多条件筛选

⭐⭐⭐⭐ 难度 4/5
练习 3:截止日期与过期提醒

添加日期选择器,设置截止日期,过期自动标红提醒。学习点:日期比较、setInterval 定时检查

⭐⭐⭐⭐ 难度 4/5
练习 4:批量操作

支持全选、批量删除、批量标记完成。学习点:checkbox 全选逻辑、批量状态更新

⭐⭐⭐⭐⭐ 难度 5/5
练习 5:数据导出 / 导入

添加「导出为 JSON」和「从 JSON 导入」功能,可以备份和恢复数据。学习点:Blob 下载、FileReader 读取

📖 运行说明

直接在浏览器中打开 index.html 即可运行,不需要任何服务器,因为所有代码都是纯前端。

数据存储在浏览器的 localStorage 中,关闭页面再打开数据依然存在 ✅

🧠 教学要点

MVC 模式:数据(todos数组) → 视图(render函数) → 控制器(事件监听)
事件代理:监听父元素,新增子元素自动响应
localStorage:JSON.stringify/parse 持久化数据
XSS 防护:escapeHtml 转义用户输入
ARIA 属性:aria-label、aria-live、aria-pressed 等
响应式设计:CSS 媒体查询 + flex 弹性布局
Generated by AiPy · 本地数据处理,不上传任何信息