fix: click判定错误 & 位置不正确

This commit is contained in:
unanmed 2025-02-18 21:13:40 +08:00
parent b448f18616
commit 4b2d94e422
5 changed files with 19 additions and 11 deletions

View File

@ -72,6 +72,7 @@ export interface IActionEvent {
/** /**
* *
* `buttons & MouseType.Left` * `buttons & MouseType.Left`
*
*/ */
buttons: number; buttons: number;
/** 触发时是否按下了 alt 键 */ /** 触发时是否按下了 alt 键 */

View File

@ -822,6 +822,7 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
} }
case ActionType.Down: { case ActionType.Down: {
// 记录标识符,用于判定 click // 记录标识符,用于判定 click
if (!inElement) return false;
if (event.touch) { if (event.touch) {
this.touchId.add(event.identifier); this.touchId.add(event.identifier);
} else { } else {
@ -830,6 +831,7 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
break; break;
} }
case ActionType.Click: { case ActionType.Click: {
if (!inElement) return false;
if (event.touch) { if (event.touch) {
if (!this.touchId.has(event.identifier)) { if (!this.touchId.has(event.identifier)) {
return false; return false;
@ -878,7 +880,9 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
event: IActionEvent, event: IActionEvent,
transform: Transform transform: Transform
): vec3 { ): vec3 {
return transform.untransformed(event.offsetX, event.offsetY); const x = event.offsetX + this.anchorX * this.width;
const y = event.offsetY + this.anchorY * this.height;
return transform.untransformed(x, y);
} }
/** /**

View File

@ -236,8 +236,8 @@ export class Icon extends RenderItem<EIconEvent> implements IAnimateFrame {
const renderable = this.renderable; const renderable = this.renderable;
if (!renderable) return; if (!renderable) return;
const [x, y, w, h] = renderable.render[0]; const [x, y, w, h] = renderable.render[0];
const cw = canvas.width; const cw = this.width;
const ch = canvas.height; const ch = this.height;
const frame = this.animate const frame = this.animate
? RenderItem.animatedFrame % renderable.frame ? RenderItem.animatedFrame % renderable.frame
: 0; : 0;

View File

@ -214,7 +214,9 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
case ActionType.Move: case ActionType.Move:
case ActionType.Enter: case ActionType.Enter:
case ActionType.Leave: case ActionType.Leave:
case ActionType.Wheel: case ActionType.Wheel: {
return this.getActiveMouseIdentifier(mouse);
}
case ActionType.Up: case ActionType.Up:
case ActionType.Click: { case ActionType.Click: {
const id = this.getActiveMouseIdentifier(mouse); const id = this.getActiveMouseIdentifier(mouse);
@ -241,14 +243,16 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
mouse: MouseType = this.getMouseType(event) mouse: MouseType = this.getMouseType(event)
): IActionEvent { ): IActionEvent {
const id = this.getMouseIdentifier(type, mouse); const id = this.getMouseIdentifier(type, mouse);
const x = event.offsetX / core.domStyle.scale;
const y = event.offsetY / core.domStyle.scale;
return { return {
target: this, target: this,
identifier: id, identifier: id,
touch: false, touch: false,
offsetX: event.offsetX, offsetX: x,
offsetY: event.offsetY, offsetY: y,
absoluteX: event.offsetX, absoluteX: x,
absoluteY: event.offsetY, absoluteY: y,
type: mouse, type: mouse,
buttons: this.getMouseButtons(event), buttons: this.getMouseButtons(event),
altKey: event.altKey, altKey: event.altKey,
@ -309,8 +313,8 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
event: TouchEvent, event: TouchEvent,
rect: DOMRect rect: DOMRect
): IActionEvent { ): IActionEvent {
const x = touch.clientX - rect.left; const x = (touch.clientX - rect.left) / core.domStyle.scale;
const y = touch.clientY - rect.top; const y = (touch.clientY - rect.top) / core.domStyle.scale;
return { return {
target: this, target: this,
identifier: this.getTouchIdentifier(touch, type), identifier: this.getTouchIdentifier(touch, type),

View File

@ -66,7 +66,6 @@ export function create() {
return () => ( return () => (
<container id="map-draw" {...mapDrawProps}> <container id="map-draw" {...mapDrawProps}>
<icon icon={50} zIndex={100}></icon>
<layer-group id="layer-main" ex={layerGroupExtends} ref={map}> <layer-group id="layer-main" ex={layerGroupExtends} ref={map}>
<layer layer="bg" zIndex={10}></layer> <layer layer="bg" zIndex={10}></layer>
<layer layer="bg2" zIndex={20}></layer> <layer layer="bg2" zIndex={20}></layer>