Register and unregister events in set target handler
This commit is contained in:
@@ -282,17 +282,13 @@ class PluggableMap extends BaseObject {
|
|||||||
* @private
|
* @private
|
||||||
* @type {MapBrowserEventHandler}
|
* @type {MapBrowserEventHandler}
|
||||||
*/
|
*/
|
||||||
this.mapBrowserEventHandler_ = new MapBrowserEventHandler(
|
this.mapBrowserEventHandler_ = null;
|
||||||
this,
|
|
||||||
options.moveTolerance
|
/**
|
||||||
);
|
* @private
|
||||||
const handleMapBrowserEvent = this.handleMapBrowserEvent.bind(this);
|
* @type {number}
|
||||||
for (const key in MapBrowserEventType) {
|
*/
|
||||||
this.mapBrowserEventHandler_.addEventListener(
|
this.moveTolerance_ = options.moveTolerance;
|
||||||
MapBrowserEventType[key],
|
|
||||||
handleMapBrowserEvent
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -306,18 +302,6 @@ class PluggableMap extends BaseObject {
|
|||||||
*/
|
*/
|
||||||
this.keyHandlerKeys_ = null;
|
this.keyHandlerKeys_ = null;
|
||||||
|
|
||||||
const handleBrowserEvent = this.handleBrowserEvent.bind(this);
|
|
||||||
this.viewport_.addEventListener(
|
|
||||||
EventType.CONTEXTMENU,
|
|
||||||
handleBrowserEvent,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
this.viewport_.addEventListener(
|
|
||||||
EventType.WHEEL,
|
|
||||||
handleBrowserEvent,
|
|
||||||
PASSIVE_EVENT_LISTENERS ? {passive: false} : false
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {Collection<import("./control/Control.js").default>}
|
* @type {Collection<import("./control/Control.js").default>}
|
||||||
* @protected
|
* @protected
|
||||||
@@ -550,19 +534,6 @@ class PluggableMap extends BaseObject {
|
|||||||
* Clean up.
|
* Clean up.
|
||||||
*/
|
*/
|
||||||
disposeInternal() {
|
disposeInternal() {
|
||||||
this.mapBrowserEventHandler_.dispose();
|
|
||||||
this.viewport_.removeEventListener(
|
|
||||||
EventType.CONTEXTMENU,
|
|
||||||
this.boundHandleBrowserEvent_
|
|
||||||
);
|
|
||||||
this.viewport_.removeEventListener(
|
|
||||||
EventType.WHEEL,
|
|
||||||
this.boundHandleBrowserEvent_
|
|
||||||
);
|
|
||||||
if (this.handleResize_ !== undefined) {
|
|
||||||
removeEventListener(EventType.RESIZE, this.handleResize_, false);
|
|
||||||
this.handleResize_ = undefined;
|
|
||||||
}
|
|
||||||
this.setTarget(null);
|
this.setTarget(null);
|
||||||
super.disposeInternal();
|
super.disposeInternal();
|
||||||
}
|
}
|
||||||
@@ -1126,9 +1097,10 @@ class PluggableMap extends BaseObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param {import("./Object").ObjectEvent} event Event.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
handleTargetChanged_() {
|
handleTargetChanged_(event) {
|
||||||
// target may be undefined, null, a string or an Element.
|
// target may be undefined, null, a string or an Element.
|
||||||
// If it's a string we convert it to an Element before proceeding.
|
// If it's a string we convert it to an Element before proceeding.
|
||||||
// If it's not now an Element we remove the viewport from the DOM.
|
// If it's not now an Element we remove the viewport from the DOM.
|
||||||
@@ -1139,11 +1111,25 @@ class PluggableMap extends BaseObject {
|
|||||||
targetElement = this.getTargetElement();
|
targetElement = this.getTargetElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.keyHandlerKeys_) {
|
if (event.oldValue) {
|
||||||
for (let i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {
|
for (let i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {
|
||||||
unlistenByKey(this.keyHandlerKeys_[i]);
|
unlistenByKey(this.keyHandlerKeys_[i]);
|
||||||
}
|
}
|
||||||
this.keyHandlerKeys_ = null;
|
this.keyHandlerKeys_ = null;
|
||||||
|
this.viewport_.removeEventListener(
|
||||||
|
EventType.CONTEXTMENU,
|
||||||
|
this.boundHandleBrowserEvent_
|
||||||
|
);
|
||||||
|
this.viewport_.removeEventListener(
|
||||||
|
EventType.WHEEL,
|
||||||
|
this.boundHandleBrowserEvent_
|
||||||
|
);
|
||||||
|
if (this.handleResize_ !== undefined) {
|
||||||
|
removeEventListener(EventType.RESIZE, this.handleResize_, false);
|
||||||
|
this.handleResize_ = undefined;
|
||||||
|
}
|
||||||
|
this.mapBrowserEventHandler_.dispose();
|
||||||
|
removeNode(this.viewport_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!targetElement) {
|
if (!targetElement) {
|
||||||
@@ -1157,17 +1143,33 @@ class PluggableMap extends BaseObject {
|
|||||||
cancelAnimationFrame(this.animationDelayKey_);
|
cancelAnimationFrame(this.animationDelayKey_);
|
||||||
this.animationDelayKey_ = undefined;
|
this.animationDelayKey_ = undefined;
|
||||||
}
|
}
|
||||||
removeNode(this.viewport_);
|
|
||||||
if (this.handleResize_ !== undefined) {
|
|
||||||
removeEventListener(EventType.RESIZE, this.handleResize_, false);
|
|
||||||
this.handleResize_ = undefined;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
targetElement.appendChild(this.viewport_);
|
targetElement.appendChild(this.viewport_);
|
||||||
if (!this.renderer_) {
|
if (!this.renderer_) {
|
||||||
this.renderer_ = this.createRenderer();
|
this.renderer_ = this.createRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.mapBrowserEventHandler_ = new MapBrowserEventHandler(
|
||||||
|
this,
|
||||||
|
this.moveTolerance_
|
||||||
|
);
|
||||||
|
for (const key in MapBrowserEventType) {
|
||||||
|
this.mapBrowserEventHandler_.addEventListener(
|
||||||
|
MapBrowserEventType[key],
|
||||||
|
this.handleMapBrowserEvent.bind(this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.viewport_.addEventListener(
|
||||||
|
EventType.CONTEXTMENU,
|
||||||
|
this.boundHandleBrowserEvent_,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
this.viewport_.addEventListener(
|
||||||
|
EventType.WHEEL,
|
||||||
|
this.boundHandleBrowserEvent_,
|
||||||
|
PASSIVE_EVENT_LISTENERS ? {passive: false} : false
|
||||||
|
);
|
||||||
|
|
||||||
const keyboardEventTarget = !this.keyboardEventTarget_
|
const keyboardEventTarget = !this.keyboardEventTarget_
|
||||||
? targetElement
|
? targetElement
|
||||||
: this.keyboardEventTarget_;
|
: this.keyboardEventTarget_;
|
||||||
|
|||||||
Reference in New Issue
Block a user