diff --git a/src/ol/interaction/doubleclickzoominteraction.js b/src/ol/interaction/doubleclickzoominteraction.js index 1d9a087e7d..29fb5050b4 100644 --- a/src/ol/interaction/doubleclickzoominteraction.js +++ b/src/ol/interaction/doubleclickzoominteraction.js @@ -52,6 +52,6 @@ ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = ol.interaction.Interaction.zoomByDelta(map, view, delta, anchor, ol.interaction.DOUBLECLICKZOOM_ANIMATION_DURATION); mapBrowserEvent.preventDefault(); - browserEvent.preventDefault(); + mapBrowserEvent.stopOtherInteractions(); } }; diff --git a/src/ol/interaction/keyboardpaninteraction.js b/src/ol/interaction/keyboardpaninteraction.js index d5f6fc9a93..ecd780c430 100644 --- a/src/ol/interaction/keyboardpaninteraction.js +++ b/src/ol/interaction/keyboardpaninteraction.js @@ -81,8 +81,8 @@ ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = ol.coordinate.rotate(delta, rotation); ol.interaction.Interaction.pan( map, view, delta, ol.interaction.KEYBOARD_PAN_DURATION); - keyEvent.preventDefault(); mapBrowserEvent.preventDefault(); + mapBrowserEvent.stopOtherInteractions(); } } }; diff --git a/src/ol/interaction/keyboardzoominteraction.js b/src/ol/interaction/keyboardzoominteraction.js index 8bd6cc8748..bf23e2adfa 100644 --- a/src/ol/interaction/keyboardzoominteraction.js +++ b/src/ol/interaction/keyboardzoominteraction.js @@ -62,8 +62,8 @@ ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = var view = map.getView().getView2D(); ol.interaction.Interaction.zoomByDelta(map, view, delta, undefined, ol.interaction.KEYBOARD_ZOOM_DURATION); - keyEvent.preventDefault(); mapBrowserEvent.preventDefault(); + mapBrowserEvent.stopOtherInteractions(); } } }; diff --git a/src/ol/interaction/mousewheelzoominteraction.js b/src/ol/interaction/mousewheelzoominteraction.js index 25d5bcbe42..2042565c5e 100644 --- a/src/ol/interaction/mousewheelzoominteraction.js +++ b/src/ol/interaction/mousewheelzoominteraction.js @@ -93,7 +93,7 @@ ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent = goog.bind(this.doZoom_, this, map), timeLeft); mapBrowserEvent.preventDefault(); - mouseWheelEvent.preventDefault(); + mapBrowserEvent.stopOtherInteractions(); } }; diff --git a/src/ol/map.js b/src/ol/map.js index 5f0fa37b6e..c1864078e5 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -644,7 +644,7 @@ ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { for (i = interactionsArray.length - 1; i >= 0; i--) { var interaction = interactionsArray[i]; interaction.handleMapBrowserEvent(mapBrowserEvent); - if (mapBrowserEvent.defaultPrevented) { + if (mapBrowserEvent.otherInteractionsStopped) { break; } } diff --git a/src/ol/mapbrowserevent.exports b/src/ol/mapbrowserevent.exports index 4d2e9d2e5f..86297f9067 100644 --- a/src/ol/mapbrowserevent.exports +++ b/src/ol/mapbrowserevent.exports @@ -1,2 +1,4 @@ @exportProperty ol.MapBrowserEvent.prototype.getCoordinate @exportProperty ol.MapBrowserEvent.prototype.getPixel +@exportProperty ol.MapBrowserEvent.prototype.preventDefault +@exportProperty ol.MapBrowserEvent.prototype.stopPropagation diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index dae9c0119b..eadac888fb 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -39,6 +39,11 @@ ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) { */ this.coordinate_ = null; + /** + * @type {boolean} + */ + this.otherInteractionsStopped = false; + /** * @private * @type {ol.Pixel} @@ -98,6 +103,36 @@ ol.MapBrowserEvent.prototype.isMouseActionButton = function() { }; +/** + * Prevents the default browser action. + * @see https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault + * @override + */ +ol.MapBrowserEvent.prototype.preventDefault = function() { + goog.base(this, 'preventDefault'); + this.browserEvent.preventDefault(); +}; + + +/** + * Stop the interaction chain. + */ +ol.MapBrowserEvent.prototype.stopOtherInteractions = function() { + this.otherInteractionsStopped = true; +}; + + +/** + * Prevents further propagation of the current event. + * @see https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation + * @override + */ +ol.MapBrowserEvent.prototype.stopPropagation = function() { + goog.base(this, 'stopPropagation'); + this.browserEvent.stopPropagation(); +}; + + /** * @param {ol.Map} map The map with the viewport to listen to events on.