Better fix for changing pointer ids on event target change
This commit is contained in:
@@ -73,7 +73,7 @@ class MapBrowserEventHandler extends Target {
|
|||||||
this.activePointers_ = 0;
|
this.activePointers_ = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {!Object<number, boolean>}
|
* @type {!Object<number, Event>}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.trackedTouches_ = {};
|
this.trackedTouches_ = {};
|
||||||
@@ -169,14 +169,26 @@ class MapBrowserEventHandler extends Target {
|
|||||||
*/
|
*/
|
||||||
updateActivePointers_(pointerEvent) {
|
updateActivePointers_(pointerEvent) {
|
||||||
const event = pointerEvent;
|
const event = pointerEvent;
|
||||||
|
const id = event.pointerId;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
event.type == MapBrowserEventType.POINTERUP ||
|
event.type == MapBrowserEventType.POINTERUP ||
|
||||||
event.type == MapBrowserEventType.POINTERCANCEL
|
event.type == MapBrowserEventType.POINTERCANCEL
|
||||||
) {
|
) {
|
||||||
delete this.trackedTouches_[event.pointerId];
|
delete this.trackedTouches_[id];
|
||||||
} else if (event.type == MapBrowserEventType.POINTERDOWN) {
|
} else if (event.type == MapBrowserEventType.POINTERDOWN) {
|
||||||
this.trackedTouches_[event.pointerId] = true;
|
this.trackedTouches_[id] = event;
|
||||||
|
} else if (event.type == MapBrowserEventType.POINTERMOVE) {
|
||||||
|
for (const pointerId in this.trackedTouches_) {
|
||||||
|
if (this.trackedTouches_[pointerId].target !== event.target) {
|
||||||
|
// Some platforms assign a new pointerId when the target changes.
|
||||||
|
// If this happens, delete one tracked pointer. If there is more
|
||||||
|
// than one tracked pointer for the old target, it will be cleared
|
||||||
|
// by subsequent POINTERUP events from other pointers.
|
||||||
|
delete this.trackedTouches_[pointerId];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.activePointers_ = Object.keys(this.trackedTouches_).length;
|
this.activePointers_ = Object.keys(this.trackedTouches_).length;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -195,16 +195,6 @@ class PointerInteraction extends Interaction {
|
|||||||
const id = event.pointerId.toString();
|
const id = event.pointerId.toString();
|
||||||
if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {
|
if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {
|
||||||
delete this.trackedPointers_[id];
|
delete this.trackedPointers_[id];
|
||||||
for (const pointerId in this.trackedPointers_) {
|
|
||||||
if (this.trackedPointers_[pointerId].target !== event.target) {
|
|
||||||
// Some platforms assign a new pointerId when the target changes.
|
|
||||||
// If this happens, delete one tracked pointer. If there is more
|
|
||||||
// than one tracked pointer for the old target, it will be cleared
|
|
||||||
// by subsequent POINTERUP events from other pointers.
|
|
||||||
delete this.trackedPointers_[pointerId];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {
|
} else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {
|
||||||
this.trackedPointers_[id] = event;
|
this.trackedPointers_[id] = event;
|
||||||
} else if (id in this.trackedPointers_) {
|
} else if (id in this.trackedPointers_) {
|
||||||
|
|||||||
Reference in New Issue
Block a user