From 0ef022df8a143adfc538c7e326db100e7bb225b7 Mon Sep 17 00:00:00 2001 From: esqbs <15227585460@163.com> Date: Wed, 20 Mar 2024 15:51:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=BE=E7=89=87=E6=97=8B=E8=BD=AC?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E8=BF=9B=E8=A1=8C=E5=9B=BE=E7=89=87=E8=A3=81?= =?UTF-8?q?=E5=89=AA=EF=BC=8C=E6=8B=96=E6=8B=BD=E5=BC=82=E5=B8=B8=EF=BC=88?= =?UTF-8?q?#76=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../element/ImageElement/ImageClipHandler.vue | 46 ++++++++----------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/views/components/element/ImageElement/ImageClipHandler.vue b/src/views/components/element/ImageElement/ImageClipHandler.vue index 9e7d9fe4..d8674221 100644 --- a/src/views/components/element/ImageElement/ImageClipHandler.vue +++ b/src/views/components/element/ImageElement/ImageClipHandler.vue @@ -260,21 +260,16 @@ const moveClipRange = (e: MouseEvent) => { const currentPageX = e.pageX const currentPageY = e.pageY - let moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100 - let moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100 + const _moveX = (currentPageX - startPageX) / canvasScale.value + const _moveY = (currentPageY - startPageY) / canvasScale.value - if (props.rotate > 45 && props.rotate < 135) { - moveX = (currentPageY - startPageY) / canvasScale.value / props.width * 100 - moveY = -(currentPageX - startPageX) / canvasScale.value / props.height * 100 - } - if ((props.rotate >= 135 && props.rotate <= 180) || (props.rotate >= -180 && props.rotate <= -135)) { - moveX = -moveX - moveY = -moveY - } - if (props.rotate > -135 && props.rotate < -45) { - moveX = -(currentPageY - startPageY) / canvasScale.value / props.width * 100 - moveY = (currentPageX - startPageX) / canvasScale.value / props.height * 100 - } + const _moveL = Math.sqrt(_moveX * _moveX + _moveY * _moveY) + const _moveLRotate = Math.atan2(_moveY, _moveX) + + const rotate = _moveLRotate - (props.rotate / 180) * Math.PI + + const moveX = ((_moveL * Math.cos(rotate)) / props.width) * 100 + const moveY = ((_moveL * Math.sin(rotate)) / props.height) * 100 let targetLeft = originPositopn.left + moveX let targetTop = originPositopn.top + moveY @@ -329,21 +324,16 @@ const scaleClipRange = (e: MouseEvent, type: OperateResizeHandlers) => { const currentPageX = e.pageX const currentPageY = e.pageY - let moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100 - let moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100 + const _moveX = (currentPageX - startPageX) / canvasScale.value + const _moveY = (currentPageY - startPageY) / canvasScale.value - if (props.rotate > 45 && props.rotate < 135) { - moveX = (currentPageY - startPageY) / canvasScale.value / props.width * 100 - moveY = -(currentPageX - startPageX) / canvasScale.value / props.height * 100 - } - if ((props.rotate >= 135 && props.rotate <= 180) || (props.rotate >= -180 && props.rotate <= -135)) { - moveX = -moveX - moveY = -moveY - } - if (props.rotate > -135 && props.rotate < -45) { - moveX = -(currentPageY - startPageY) / canvasScale.value / props.width * 100 - moveY = (currentPageX - startPageX) / canvasScale.value / props.height * 100 - } + const _moveL = Math.sqrt(_moveX * _moveX + _moveY * _moveY) + const _moveLRotate = Math.atan2(_moveY, _moveX) + + const rotate = _moveLRotate - (props.rotate / 180) * Math.PI + + let moveX = ((_moveL * Math.cos(rotate)) / props.width) * 100 + let moveY = ((_moveL * Math.sin(rotate)) / props.height) * 100 if (ctrlOrShiftKeyActive.value) { if (type === OperateResizeHandlers.RIGHT_BOTTOM || type === OperateResizeHandlers.LEFT_TOP) moveY = moveX / aspectRatio