diff --git a/src/ol/events.js b/src/ol/events.js index 5a64a185ce..de13619cc5 100644 --- a/src/ol/events.js +++ b/src/ol/events.js @@ -18,7 +18,7 @@ import {clear} from './obj.js'; * Listener function. This function is called with an event object as argument. * When the function returns `false`, event propagation will stop. * - * @typedef {function((Event|import("./events/Event.js").default)): (void|boolean)} ListenerFunction + * @typedef {EventListener|function((Event|import("./events/Event.js").default)): (void|boolean)} ListenerFunction * @api */ diff --git a/src/ol/events/Target.js b/src/ol/events/Target.js index 766a954479..5e84ef10b2 100644 --- a/src/ol/events/Target.js +++ b/src/ol/events/Target.js @@ -107,6 +107,17 @@ class Target extends Disposable { this.pendingRemovals_[type] = 0; } ++this.dispatching_[type]; + for (let i = 0, ii = listeners.length; i < ii; ++i) { + if (listeners[i].handleEvent) { + propagate = listeners[i].handleEvent(evt); + } else { + propagate = listeners[i].call(this, evt); + } + if (propagate === false || evt.propagationStopped) { + propagate = false; + break; + } + } for (let i = 0, ii = listeners.length; i < ii; ++i) { if (listeners[i].call(this, evt) === false || evt.propagationStopped) { propagate = false;