📋 工作日报 · 2026-05-14

拼图怪 UI 全面改版
+ Tooltip 系统 + 部署上线

纯前端拼图 PWA · 单文件 index.html · 零依赖
项目拼图怪 collage-maker-zh
时长约 8 小时
状态已部署
文件index.html · about.html
项目背景
拼图怪是本地运行的图片拼图 PWA 工具,此前用户多次反馈以下问题,但前次改版只做了 +1~3px 的微调,没解决根本:
  • 🔴 字体太小 — 每次只调大 1-2px,用户反复抱怨
  • 🔴 撤销/重做按钮又小又灰,几乎不可见
  • 🔴 画布图片拖拽调换功能完全没实现
  • 🔴 整个应用 HELP、TIPS 功能为 0
会话时间线 3 轮
上午 · 第 1 轮
全局文字颜色 — 纯白替换灰阶
用户质问"你告诉我,现在背景色是什么,字你用了什么色?"
检查发现 --text: rgba(var(--paper-rgb), .92) 实际 = rgb(210,210,212),根本是灰色。
改用 --text: #fff,所有文字变纯白。波及 about.html。
上午 · 第 2 轮 7 次迭代
撤销/重做按钮可见性修复 #066
用户:"↩ 撤销 ↪ 重做 你TMD,还没改?"
根因:JS 里 updateUndoButtons().style.opacity = '.3' 硬编码,CSS 改 6 次全被这条 inline style 覆盖。
最终方案:去掉 opacity 覆盖 + 纯白 outline 按钮。
上午 · 第 3 轮
about.html 同步修复
用户指出"关于的子页,还没修复"— about.html CSS 变量同步更新为纯白。
下午 3 轮调试
画布拖拽调换修复 #067
"不行""试了,还是不行""可以了"
根因:三处 dropEffect = 'copy' 硬编码覆盖了 cell 拖拽需要的 effectAllowed = 'move',浏览器拒绝 drop。
修复:动态匹配 + 延迟 render(pendingReorder 标记)。
傍晚
导出目录 + Canvas 尺寸 + Tooltip 系统
导出目录记忆 → 加 showSaveFilePicker id 参数
Canvas 尺寸显示 → ResizeObserver + overlay
Tooltip → 35+ 交互控件添加中文 title 提示
晚上 部署曲折
部署到 Cloudflare Pages + Token 找回 #068
用户:"我问你很简单的道理,我没给过你,前几次,你又怎么可能自己能部属呢?"
Token 从 transcript JSONL 找回 → Dashboard IP 限制 → 加入 120.230.56.186 → 部署成功。
完成事项详解 8 项
01 文字颜色全面升级 — 纯白替换灰阶
改前:--text: rgba(var(--paper-rgb), .92) ≈ rgb(210,210,212) — 灰色
改后:--text: #fff — 纯白
波及约 80+ 处文字节点:header、面板、滑块、导出控件、弹窗、toast、页脚。
02 撤销/重做按钮 — 7 次迭代 #066
改前状态:transparent + 微边框,在 header #161618 背景上完全隐形。
次数方案结果
1transparent + 微边框透出 header 底色,隐形
2accent 实心紫底 + 白字WCAG 2.77:1 FAIL
3ghost button(transparent + 微边框)header 不够黑,消失
4rgba(paper-rgb,.14) 浅色衬底用户:"不要再用浅色"
5#fff 白底 + 黑色字用户说不要背景色
6纯白 outline(白边框 + 白字)用户说不够
7白框白字 + 去掉 JS opacity 覆盖✅ 用户确认
根因:JS updateUndoButtons() 设了 .style.opacity = '.3',inline style 优先级高于一切 CSS,前 6 次全白费。
03 画布拖拽调换修复 #067
问题:图库→画布正常,画布内互换完全不行,drop 事件不触发。

根因:HTML5 DnD 规范 — effectAllowed(dragstart)与 dropEffect(dragover)必须兼容。三处 dropEffect = 'copy' 硬编码,但 cell 设了 effectAllowed = 'move' → 不兼容 → 浏览器丢弃 drop。
// 修复:所有 dragover handler 改为动态匹配
e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed === 'move' ? 'move' : 'copy';
次要问题:reorderPhotos() 调用 render() 替换了 canvas.innerHTML,DOM 替换破坏浏览器拖拽状态。
解决:pendingReorder 标记延迟到 dragend 才 render。
04 Canvas 尺寸实时显示
画布右上角 overlay 标签,用小字号 monospace 实时显示 宽×高 px。无照片时显示
基于 ResizeObserver 监听画布容器。
05 导出目录记忆
用户问"为什么保存后下次导出不是自动切到上次目录"
修复:showSaveFilePicker()id: 'collage-export' 参数,浏览器自动记忆目录。
06 Tooltip 提示系统 35+ 控件
方案:HTML title 属性,零依赖零开销。
头部撤销 (Ctrl+Z)撤销上一步操作
头部重做 (Ctrl+Shift+Z)重做被撤销的操作
图库添加照片支持多选(Ctrl+点击选多张)
版式布局列表动态显示 n张 · 布局名
外观间距滑块0=无缝,40=大间隔
外观圆角滑块0=直角,30=大圆角
外观画幅比例宽高比影响拼图构图
外观背景色空位时显示的颜色
导出格式选择PNG无损/JPG有损
编辑旋转/翻转/裁切全部 9 个工具按钮
编辑缩放滑块10%~500%
操作清空画布/图库含画布的清除操作
07 API Token 找回与归档 #068
用户曾在 Cloudflare Dashboard 创建 API Token,上下文压缩后丢失。用户反问"我问你很简单的道理,我没给过你,前几次,你又怎么可能自己能部属呢?"

从 transcript JSONL(第 11108 行)搜索找回 Token:cfut_kNNQzyXjsdRDgqMyZUZ5cspkiAqjQQrqc21cOODNac20f49e
归档到 我的私密.md,建立铁律:凭据收到即写入私密文件。
08 部署到 Cloudflare Pages
第一次:IP 限制 code: 9109 — token 绑了 IPv6 2409:8a55:5180:2821:d493:c3aa:30c0:4d3d
用户到 Dashboard 加入 120.230.56.186
第二次:项目已存在
第三次:✅ 部署成功
npx wrangler pages deploy . --project-name=collage-maker2 --branch=main
✨ Success! Uploaded 21 files (3.84 sec)
✨ Deployment complete! → https://collage-maker2.pages.dev
技术要点总结 3 类
🔄 HTML5 Drag & Drop 调试要点
  • drop 不触发 → 先查 effectAllowed 与 dropEffect 兼容性
  • 事件冒泡链上最后的 dropEffect 是生效值
  • DOM 替换(innerHTML)在拖拽中会破坏浏览器状态
  • dragover 不 preventDefault() → drop 不会触发
🎨 CSS 优先级陷阱
  • JS inline style(.style.xxx)优先级高于任何 CSS class
  • 检查 CSS 不生效时先看 JS 有没有覆盖
  • Chrome DevTools → Computed 面板看最终值
☁️ Cloudflare Pages 部署要点
  • npx wrangler pages deploy 比 Dashboard 快(增量上传)
  • Token 需 Cloudflare Pages: Edit 权限
  • IP 白名单限制 → code: 9109
  • 用 CLOUDFLARE_API_TOKEN 环境变量传 token
关键决策
#决策说明来源
1可见性优先UI 改动先过"能看到吗"关,再谈美观#066
2纯白 > opacity#fff 直接上,不用 opacity 调灰色用户纠正
3凭据即落地API Key 当轮写入 我的私密.md#068
4零依赖 tooltiptitle 属性做提示,不引入第三方原则
交付文件清单
L:\Github\obsidian\
├── projects/collage-tool/collage-maker-zh/
│ ├── index.html ← 全部改动:文字颜色、按钮、拖拽、canvas尺寸、导出目录、tooltip
│ ├── about.html ← 文字颜色同步
│ ├── sw.js ← 未改动
│ └── CNAME ← collage.esmcelroy.ca
├── _system/
│ └── improvement-log.md ← #065 部署前未审计 / #066 按钮7次 / #067 拖拽 / #068 凭据丢失
├── llm-wiki-bootstrap/raw/personal/diary/
│ └── 我的私密.md ← Cloudflare Token 归档
├── outputs/work-log/
│ ├── 2026-05-14-collage-tool-ui-overhaul.md
│ └── 2026-05-14-collage-tool-ui-overhaul.html ← 本文件
└── _work/
    └── _session_handoff.json ← 会话手递手存档
待办