diff --git a/src/ol/map.js b/src/ol/map.js index 664d0c8550..81601ffb9b 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -225,13 +225,21 @@ ol.Map = function(options) { */ this.overlayContainer_ = goog.dom.createDom(goog.dom.TagName.DIV, 'ol-overlaycontainer'); - goog.events.listen(this.overlayContainer_, [ + goog.dom.appendChild(this.viewport_, this.overlayContainer_); + + /** + * @private + * @type {Element} + */ + this.overlayContainerStopEvent_ = goog.dom.createDom(goog.dom.TagName.DIV, + 'ol-overlaycontainer-stopevent'); + goog.events.listen(this.overlayContainerStopEvent_, [ goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK, ol.BrowserFeature.HAS_TOUCH ? goog.events.EventType.TOUCHSTART : goog.events.EventType.MOUSEDOWN ], goog.events.Event.stopPropagation); - goog.dom.appendChild(this.viewport_, this.overlayContainer_); + goog.dom.appendChild(this.viewport_, this.overlayContainerStopEvent_); var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this); goog.events.listen(mapBrowserEventHandler, @@ -591,14 +599,24 @@ ol.Map.prototype.getViewport = function() { /** * @return {Element} The map's overlay container. Elements added to this - * container won't let mousedown and touchstart events through to the map, so - * clicks and gestures on an overlay don't trigger any MapBrowserEvent. + * container will let mousedown and touchstart events through to the map, so + * clicks and gestures on an overlay will trigger MapBrowserEvent events. */ ol.Map.prototype.getOverlayContainer = function() { return this.overlayContainer_; }; +/** + * @return {Element} The map's overlay container. Elements added to this + * container won't let mousedown and touchstart events through to the map, so + * clicks and gestures on an overlay don't trigger any MapBrowserEvent. + */ +ol.Map.prototype.getOverlayContainerStopEvent = function() { + return this.overlayContainerStopEvent_; +}; + + /** * @param {ol.Tile} tile Tile. * @param {string} tileSourceKey Tile source key. diff --git a/src/ol/overlay.js b/src/ol/overlay.js index 01095fead5..07dd6615e6 100644 --- a/src/ol/overlay.js +++ b/src/ol/overlay.js @@ -60,6 +60,12 @@ ol.Overlay = function(options) { goog.base(this); + /** + * @private + * @type {boolean} + */ + this.stopEvent_ = goog.isDef(options.stopEvent) ? options.stopEvent : false; + /** * @private * @type {Element} @@ -202,8 +208,10 @@ ol.Overlay.prototype.handleMapChanged = function() { this.mapPostrenderListenerKey_ = goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); this.updatePixelPosition_(); - goog.dom.append( - /** @type {!Node} */ (map.getOverlayContainer()), this.element_); + goog.dom.append(/** @type {!Node} */ ( + this.stopEvent_ ? map.getOverlayContainerStopEvent() : + map.getOverlayContainer()), + this.element_); } };