From ed693feb4012533b62ddb329da7f1af081b82ce4 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 10 Nov 2026 19:50:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E6=88=91=E5=8F=98=E6=8D=A2?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=9A=84=E4=BA=A4=E4=BA=92=E5=9D=90?= =?UTF-8?q?=E6=A0=87=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/render/src/core/item.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/render/src/core/item.ts b/packages/render/src/core/item.ts index 0ac9d2b..1a85e67 100644 --- a/packages/render/src/core/item.ts +++ b/packages/render/src/core/item.ts @@ -444,7 +444,9 @@ export abstract class RenderItem * 获取当前元素的绝对位置(不建议使用,因为应当很少会有获取绝对位置的需求) */ getAbsolutePosition(x: number = 0, y: number = 0): [number, number] { - const [px, py] = this.transform.transformed(x, y); + const [px, py] = this.selfTransform + ? [x, y] + : this.transform.transformed(x, y); if (!this.parent) return [px, py]; else { const [px, py] = this.parent.getAbsolutePosition(); @@ -456,6 +458,11 @@ export abstract class RenderItem * 获取到可以包围这个元素的最小矩形,相对于父元素 */ getBoundingRect(): DOMRectReadOnly { + if (this.selfTransform) { + const left = -this.anchorX * this.width; + const top = -this.anchorY * this.height; + return new DOMRectReadOnly(left, top, this.width, this.height); + } const tran = this.transform; if (!tran) return new DOMRectReadOnly(0, 0, this.width, this.height); const [x1, y1] = tran.transformed( @@ -867,17 +874,18 @@ export abstract class RenderItem /** * 计算一个点击事件在该元素上的位置 - * @param event 触发的事件 + * @param ev 触发的事件 * @param transform 当前的变换矩阵 */ - protected calActionPosition( - event: IActionEvent, - transform: Transform - ): vec3 { + protected calActionPosition(ev: IActionEvent, transform: Transform): vec3 { const ax = this.anchorX * this.width; const ay = this.anchorY * this.height; - const [tx, ty] = transform.untransformed(event.offsetX, event.offsetY); - return [tx + ax, ty + ay, 0]; + if (this.selfTransform) { + return [ax, ay, 0]; + } else { + const [tx, ty] = transform.untransformed(ev.offsetX, ev.offsetY); + return [tx + ax, ty + ay, 0]; + } } /**