From 815aeb81a99f122de36faadea0580948b1b41bca Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 10 Jun 2026 16:15:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20dev=20SPA=20=E5=8A=A0=209=20?= =?UTF-8?q?=E5=A4=84=E5=85=8B=E5=88=B6=E5=85=A5=E5=9C=BA=E5=BE=AE=E5=8A=A8?= =?UTF-8?q?=E6=95=88(=E7=BA=AF=20CSS=20+=20=E4=B8=80=E5=A4=84=E6=9E=81?= =?UTF-8?q?=E5=B0=8F=20JS)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 保留现有红主色 / VS Code 三栏审美不改风格,只补低风险微动效: - 消息气泡 .msg 淡入+上滑(批量加载退化为柔和集体淡入) - 4 个 .modal 卡片 scale 弹入 + 遮罩淡入 - 全局 button:active 下压 1px - 进度 dock / 上传 toast 顶部滑下淡入 - 下拉操作菜单 #floating-menu 从右上锚点弹出 - 拖拽 overlay #file-droparea 快淡入 - 拖拽文件放下 → 落点 pane-right 一次 drop-pulse 轻回弹(files.js 加 .drop-pulse + animationend once 自摘 + reflow 保证可重放) - 全部纳入 prefers-reduced-motion 守卫(spinner/blink 等功能动画保留) 刻意未做:进度块「打勾」逐步动画(dock.innerHTML 每 tick 全量重渲染, keyframe 会逐 tick 重放);复制 ✓ 闪(当前 SPA 无剪贴板复制功能,无触发点)。 Co-Authored-By: Claude Opus 4.8 (1M context) --- PROGRESS.md | 1 + web/static/dev.html | 31 +++++++++++++++++++++++++------ web/static/js/files.js | 6 ++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/PROGRESS.md b/PROGRESS.md index 4f11e53..222c626 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -23,6 +23,7 @@ ### 2026-06-10 +- **dev SPA 加克制入场微动效(纯 CSS、单文件、可一键回退)**:`web/static/dev.html` 的 ` diff --git a/web/static/js/files.js b/web/static/js/files.js index cf3cd0f..389e211 100644 --- a/web/static/js/files.js +++ b/web/static/js/files.js @@ -172,6 +172,12 @@ $("pane-right").addEventListener("drop", async (e) => { $("file-droparea").classList.remove("show"); const files = Array.from(e.dataTransfer.files || []); if (!files.length) return; + // 落点轻回弹脉冲:一次性,动画结束自摘(避免再次拖入不触发) + const pane = $("pane-right"); + pane.classList.remove("drop-pulse"); + void pane.offsetWidth; // 强制 reflow 让动画可重放 + pane.classList.add("drop-pulse"); + pane.addEventListener("animationend", () => pane.classList.remove("drop-pulse"), { once: true }); await uploadFilesWithPaneStatus(files); });