From 7c69ccefc2032cec72ea45585287fc53a0374a51 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 1 Mar 2026 02:12:59 +0800 Subject: [PATCH] fix(canvas): split compare into two panes for transparent outputs --- components/canvas/nodes/ImageNode.tsx | 44 ++++++++++++++++++++------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/components/canvas/nodes/ImageNode.tsx b/components/canvas/nodes/ImageNode.tsx index fce0a005a..8ca067d48 100644 --- a/components/canvas/nodes/ImageNode.tsx +++ b/components/canvas/nodes/ImageNode.tsx @@ -287,6 +287,7 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { // 文件输入的 ref const fileInputRef = useRef(null); const containerRef = useRef(null); + const compareFrameRef = useRef(null); const updateNode = useCanvasStore((state) => state.updateNode); const deleteNode = useCanvasStore((state) => state.deleteNode); @@ -387,6 +388,17 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { } }, [hasCompareSource, isThisNodePicking]); + const updateCompareSplitByClientX = useCallback((clientX: number) => { + const frame = compareFrameRef.current; + if (!frame) return; + + const rect = frame.getBoundingClientRect(); + if (rect.width <= 0) return; + + const rawPercent = ((clientX - rect.left) / rect.width) * 100; + setCompareSplitPercent(Math.max(0, Math.min(100, rawPercent))); + }, []); + useEffect(() => { if (!isCompareMode) return; @@ -1589,6 +1601,7 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) {
{isCompareMode && hasCompareSource ? (
- {`${displayTitle}-原图`} +
+
+ {displayTitle} +
+
{displayTitle}
@@ -1631,10 +1653,10 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { <>
- 原图 + 新图
- 新图 + 原图
) : (