From 8bcedfe51bece6c987b0748c1da61cbc54332ded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AF=E6=9C=A8=E6=B3=BD?= <195470117+kumu-ze@users.noreply.github.com> Date: Sat, 18 Jul 2026 20:21:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(canvas):=20=E9=98=B2=E6=AD=A2=E7=A9=BA?= =?UTF-8?q?=E6=A0=BC=E5=B9=B3=E7=A7=BB=E8=AF=AF=E8=A7=A6=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/content/docs/progress/pending-test.mdx | 2 +- web/src/components/canvas/use-image-editor-viewport.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/content/docs/progress/pending-test.mdx b/docs/content/docs/progress/pending-test.mdx index 54aaf02..57e88e9 100644 --- a/docs/content/docs/progress/pending-test.mdx +++ b/docs/content/docs/progress/pending-test.mdx @@ -5,4 +5,4 @@ description: 当前版本已实现但仍需人工验证的变更项 # 待测试 -- 图片编辑弹窗:遮罩、切图和裁剪支持滚轮缩放、中键或空格加左键平移;遮罩支持撤回/重做、Alt 加左/右键横拖调整笔刷;切图支持选中线后 Delete 删除及撤回/重做;裁剪支持固定当前比例、原图、1:1、4:3、16:9、9:16,需验证高分辨率图片下无重影、闪烁或误触。 +- 图片编辑弹窗:遮罩、切图和裁剪支持滚轮缩放、中键或空格加左键平移;聚焦弹窗按钮后按空格应只进入平移模式,不能误触关闭或其他按钮;遮罩支持撤回/重做、Alt 加左/右键横拖调整笔刷;切图支持选中线后 Delete 删除及撤回/重做;裁剪支持固定当前比例、原图、1:1、4:3、16:9、9:16,需验证高分辨率图片下无重影、闪烁或误触。 diff --git a/web/src/components/canvas/use-image-editor-viewport.ts b/web/src/components/canvas/use-image-editor-viewport.ts index c9a149b..8037368 100644 --- a/web/src/components/canvas/use-image-editor-viewport.ts +++ b/web/src/components/canvas/use-image-editor-viewport.ts @@ -37,11 +37,18 @@ export function useImageEditorViewport(image: ImageSize | null, open: boolean) { const target = event.target instanceof Element ? event.target : null; if (target?.closest("input,textarea,[contenteditable='true']")) return; event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + if (document.activeElement instanceof HTMLElement && document.activeElement.matches("button,a,[role='button']")) document.activeElement.blur(); spacePressedRef.current = true; setSpacePressed(true); }; const handleKeyUp = (event: KeyboardEvent) => { - if (event.code === "Space") releaseSpace(); + if (event.code !== "Space" || !spacePressedRef.current) return; + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + releaseSpace(); }; window.addEventListener("keydown", handleKeyDown, true); window.addEventListener("keyup", handleKeyUp, true);