From 1cadc2be1d9dec067d690bbf50e994390286747c Mon Sep 17 00:00:00 2001 From: kjqwer <2990346238@qq.com> Date: Wed, 3 Dec 2025 09:04:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=96=E5=8A=A8=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/PromptEditor.vue | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/PromptEditor.vue b/src/components/PromptEditor.vue index 45649cf..a40cb68 100644 --- a/src/components/PromptEditor.vue +++ b/src/components/PromptEditor.vue @@ -20,6 +20,8 @@ const startX = ref(0); const startY = ref(0); const lastX = ref(0); const lastY = ref(0); +const dragOffsetX = ref(0); +const dragOffsetY = ref(0); const dragStarted = ref(false); const dragContainer = ref(null); const cachedTokenRects = ref<{ @@ -580,6 +582,12 @@ function onPointerDown(index: number, e: PointerEvent) { startY.value = e.clientY; lastX.value = e.clientX; lastY.value = e.clientY; + + const target = e.currentTarget as HTMLElement; + const rect = target.getBoundingClientRect(); + dragOffsetX.value = e.clientX - rect.left; + dragOffsetY.value = e.clientY - rect.top; + dragStarted.value = false; isDragging.value = false; insertSide.value = null; @@ -699,7 +707,7 @@ function createPointerPreview(index: number) { function positionPreview(x: number, y: number) { if (!dragPreview.value) return; - dragPreview.value.style.transform = `translate(${x + 12}px, ${y + 12}px)`; + dragPreview.value.style.transform = `translate(${x - dragOffsetX.value}px, ${y - dragOffsetY.value}px)`; } function updateOverIndexAndSideFast(clientX: number, clientY: number) {