From 054d923c4ef4f57009198cceaf41f822ddfb1925 Mon Sep 17 00:00:00 2001 From: pissang Date: Tue, 29 Nov 2022 14:13:54 +0800 Subject: [PATCH] use pointer event in EventManager --- src/app/EventManager.ts | 37 ++++++++++++------------------------- src/core/vendor.ts | 8 ++++++-- src/plugin/FreeControl.ts | 4 ---- src/plugin/OrbitControl.ts | 1 - 4 files changed, 18 insertions(+), 32 deletions(-) diff --git a/src/app/EventManager.ts b/src/app/EventManager.ts index 84562ce3..7233fffe 100644 --- a/src/app/EventManager.ts +++ b/src/app/EventManager.ts @@ -10,21 +10,17 @@ import Camera from '../Camera'; const EVENT_NAMES = [ 'click', 'dblclick', - 'mouseover', - 'mouseout', - 'mousemove', - 'mousedown', - 'mouseup', - 'touchstart', - 'touchend', - 'touchmove', - 'mousewheel' + 'pointerout', + 'pointermove', + 'pointerdown', + 'pointerup', + 'wheel' ] as const; type ClayEventType = | 'click' | 'dblclick' - | 'mousewheel' + | 'wheel' | 'pointerdown' | 'pointermove' | 'pointerup' @@ -109,9 +105,9 @@ export class EventManager { let offsetX, offsetY; let eveType: ClayEventType; - if (domEveType.indexOf('touch') >= 0) { + if ((e as TouchEvent).targetTouches) { const touch = - domEveType !== 'touchend' + domEveType !== 'pointerup' ? (e as TouchEvent).targetTouches[0] : (e as TouchEvent).changedTouches[0]; @@ -125,8 +121,8 @@ export class EventManager { const pickResult = rayPicking.pick(renderer, scene, mainCamera, offsetX, offsetY); let delta; - if (domEveType === 'mousewheel') { - delta = (e as any).wheelDelta ? (e as any).wheelDelta / 120 : -(e.detail || 0) / 3; + if (domEveType === 'wheel') { + delta = (e as WheelEvent).deltaY / 120; } if (pickResult) { @@ -135,7 +131,7 @@ export class EventManager { return; } - if (domEveType === 'mousemove' || domEveType === 'touchmove') { + if (domEveType === 'pointermove') { // PENDING touchdown should trigger mouseover event ? const targetChanged = pickResult.target !== oldTarget; if (targetChanged) { @@ -164,16 +160,7 @@ export class EventManager { } } else { // Map events - eveType = - domEveType === 'mousedown' || domEveType === 'touchstart' - ? 'pointerdown' - : domEveType === 'mouseup' || domEveType === 'touchend' - ? 'pointerup' - : domEveType === 'mouseover' - ? 'pointerover' - : domEveType === 'mouseout' - ? 'pointerout' - : domEveType; + eveType = domEveType; bubblingEvent( pickResult.target, packageEvent(eveType, pickResult, offsetX, offsetY, delta) diff --git a/src/core/vendor.ts b/src/core/vendor.ts index 70dfaea8..eab7f525 100644 --- a/src/core/vendor.ts +++ b/src/core/vendor.ts @@ -13,11 +13,15 @@ interface Vendor { }; addEventListener: ( dom: any, - type: keyof DocumentEventMap, + type: keyof DocumentEventMap | keyof WindowEventHandlersEventMap, func: Function, useCapture?: boolean ) => void; - removeEventListener: (dom: any, type: keyof DocumentEventMap, func: Function) => void; + removeEventListener: ( + dom: any, + type: keyof DocumentEventMap | keyof WindowEventHandlersEventMap, + func: Function + ) => void; } const vendor = {} as Vendor; diff --git a/src/plugin/FreeControl.ts b/src/plugin/FreeControl.ts index 440187db..d3ef0f92 100644 --- a/src/plugin/FreeControl.ts +++ b/src/plugin/FreeControl.ts @@ -110,8 +110,6 @@ class FreeControl extends Notifier { addEvent(el, 'click', this._requestPointerLock); addEvent(document, 'pointerlockchange', this._lockChange); - addEvent(document, 'mozpointerlockchange', this._lockChange); - addEvent(document, 'webkitpointerlockchange', this._lockChange); addEvent(document, 'keydown', this._keyDown); addEvent(document, 'keyup', this._keyUp); @@ -136,8 +134,6 @@ class FreeControl extends Notifier { removeEvent(el, 'click', this._requestPointerLock); removeEvent(document, 'pointerlockchange', this._lockChange); - removeEvent(document, 'mozpointerlockchange', this._lockChange); - removeEvent(document, 'webkitpointerlockchange', this._lockChange); removeEvent(document, 'keydown', this._keyDown); removeEvent(document, 'keyup', this._keyUp); diff --git a/src/plugin/OrbitControl.ts b/src/plugin/OrbitControl.ts index 6a672eae..9a68d477 100644 --- a/src/plugin/OrbitControl.ts +++ b/src/plugin/OrbitControl.ts @@ -787,7 +787,6 @@ class OrbitControl extends Notifier { } _mouseWheelHandler(e: WheelEvent) { - console.log('wheel'); if (this._isAnimating()) { return; }