/** * @module ol/MapBrowserEvent */ import MapEvent from './MapEvent.js'; /** * @classdesc * Events emitted as map browser events are instances of this type. * See {@link module:ol/Map~Map} for which events trigger a map browser event. * @template {UIEvent} EVENT */ class MapBrowserEvent extends MapEvent { /** * @param {string} type Event type. * @param {import("./Map.js").default} map Map. * @param {EVENT} originalEvent Original event. * @param {boolean} [dragging] Is the map currently being dragged? * @param {import("./Map.js").FrameState} [frameState] Frame state. * @param {Array} [activePointers] Active pointers. */ constructor(type, map, originalEvent, dragging, frameState, activePointers) { super(type, map, frameState); /** * The original browser event. * @const * @type {EVENT} * @api */ this.originalEvent = originalEvent; /** * The map pixel relative to the viewport corresponding to the original browser event. * @type {?import("./pixel.js").Pixel} */ this.pixel_ = null; /** * The coordinate in the user projection corresponding to the original browser event. * @type {?import("./coordinate.js").Coordinate} */ this.coordinate_ = null; /** * Indicates if the map is currently being dragged. Only set for * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`. * * @type {boolean} * @api */ this.dragging = dragging !== undefined ? dragging : false; /** * @type {Array|undefined} */ this.activePointers = activePointers; } /** * The map pixel relative to the viewport corresponding to the original event. * @type {import("./pixel.js").Pixel} * @api */ get pixel() { if (!this.pixel_) { this.pixel_ = this.map.getEventPixel(this.originalEvent); } return this.pixel_; } set pixel(pixel) { this.pixel_ = pixel; } /** * The coordinate corresponding to the original browser event. This will be in the user * projection if one is set. Otherwise it will be in the view projection. * @type {import("./coordinate.js").Coordinate} * @api */ get coordinate() { if (!this.coordinate_) { this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel); } return this.coordinate_; } set coordinate(coordinate) { this.coordinate_ = coordinate; } /** * Prevents the default browser action. * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault. * @api */ preventDefault() { super.preventDefault(); if ('preventDefault' in this.originalEvent) { /** @type {UIEvent} */ (this.originalEvent).preventDefault(); } } /** * Prevents further propagation of the current event. * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation. * @api */ stopPropagation() { super.stopPropagation(); if ('stopPropagation' in this.originalEvent) { /** @type {UIEvent} */ (this.originalEvent).stopPropagation(); } } } export default MapBrowserEvent;