From d0a214d30916c6bdea333535e3536f195579ff40 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 1 Mar 2026 01:50:07 +0800 Subject: [PATCH] fix(canvas): implement true before-after split drag interaction --- components/canvas/nodes/ImageNode.tsx | 72 +++++++++++++++------------ 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/components/canvas/nodes/ImageNode.tsx b/components/canvas/nodes/ImageNode.tsx index dce455f47..87642d981 100644 --- a/components/canvas/nodes/ImageNode.tsx +++ b/components/canvas/nodes/ImageNode.tsx @@ -350,6 +350,11 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { setCompareSplitPercent(clampedPercent); }, []); + const startCompareDrag = useCallback((clientX: number) => { + setIsCompareDragging(true); + updateCompareSplitByClientX(clientX); + }, [updateCompareSplitByClientX]); + useEffect(() => { if (!isCompareDragging) return; @@ -1562,64 +1567,69 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { isCompareDragging ? "cursor-col-resize" : "cursor-default" )} style={{ touchAction: "none" }} + data-canvas-no-drag="true" + onPointerDown={(event) => { + if (event.button !== 0) return; + event.preventDefault(); + event.stopPropagation(); + event.currentTarget.setPointerCapture(event.pointerId); + startCompareDrag(event.clientX); + }} + onPointerMove={(event) => { + if (!isCompareDragging) return; + event.preventDefault(); + event.stopPropagation(); + updateCompareSplitByClientX(event.clientX); + }} + onPointerUp={(event) => { + if (!isCompareDragging) return; + event.preventDefault(); + event.stopPropagation(); + setIsCompareDragging(false); + }} + onPointerCancel={() => { + setIsCompareDragging(false); + }} > {displayTitle}
{`${displayTitle}-原图`}
原图