diff --git a/packages/components/image-viewer/src/image-viewer.vue b/packages/components/image-viewer/src/image-viewer.vue index 0bd535c0d0..1b938bde6e 100644 --- a/packages/components/image-viewer/src/image-viewer.vue +++ b/packages/components/image-viewer/src/image-viewer.vue @@ -178,20 +178,11 @@ const imgStyle = computed(() => { let translateX = offsetX / scale let translateY = offsetY / scale - switch (deg % 360) { - case 90: - case -270: - ;[translateX, translateY] = [translateY, -translateX] - break - case 180: - case -180: - ;[translateX, translateY] = [-translateX, -translateY] - break - case 270: - case -90: - ;[translateX, translateY] = [-translateY, translateX] - break - } + const radian = (deg * Math.PI) / 180 + const cosRadian = Math.cos(radian) + const sinRadian = Math.sin(radian) + translateX = translateX * cosRadian + translateY * sinRadian + translateY = translateY * cosRadian - (offsetX / scale) * sinRadian const style: CSSProperties = { transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`,