From f3ce8e23b47cc98da0472303c62b2f3568b5a568 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Fri, 14 Feb 2020 13:49:08 +0100 Subject: [PATCH] Fractional zoom changes in WHEEL mode --- src/ol/interaction/MouseWheelZoom.js | 15 +++++++++++---- test/spec/ol/interaction/mousewheelzoom.test.js | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ol/interaction/MouseWheelZoom.js b/src/ol/interaction/MouseWheelZoom.js index 1ed762bc17..92c57b1ad7 100644 --- a/src/ol/interaction/MouseWheelZoom.js +++ b/src/ol/interaction/MouseWheelZoom.js @@ -130,7 +130,7 @@ class MouseWheelZoom extends Interaction { * @private * @type {number} */ - this.trackpadDeltaPerZoom_ = 300; + this.deltaPerZoom_ = 300; } @@ -220,7 +220,7 @@ class MouseWheelZoom extends Interaction { view.beginInteraction(); } this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.trackpadEventGap_); - view.adjustZoom(-delta / this.trackpadDeltaPerZoom_, this.lastAnchor_); + view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_); this.startTime_ = now; return false; } @@ -244,8 +244,15 @@ class MouseWheelZoom extends Interaction { if (view.getAnimating()) { view.cancelAnimations(); } - const delta = clamp(this.totalDelta_, -this.maxDelta_, this.maxDelta_); - zoomByDelta(view, -delta, this.lastAnchor_, this.duration_); + let delta = -clamp(this.totalDelta_, -this.maxDelta_ * this.deltaPerZoom_, this.maxDelta_ * this.deltaPerZoom_) / this.deltaPerZoom_; + const currentZoom = view.getZoom(); + const newZoom = view.getConstrainedZoom(currentZoom + delta); + if (currentZoom === newZoom) { + // view has a zoom constraint, zoom by 1 + delta = delta ? delta > 0 ? 1 : -1 : 0; + } + zoomByDelta(view, delta, this.lastAnchor_, this.duration_); + this.mode_ = undefined; this.totalDelta_ = 0; this.lastAnchor_ = null; diff --git a/test/spec/ol/interaction/mousewheelzoom.test.js b/test/spec/ol/interaction/mousewheelzoom.test.js index ee1858bf5d..8f0343446d 100644 --- a/test/spec/ol/interaction/mousewheelzoom.test.js +++ b/test/spec/ol/interaction/mousewheelzoom.test.js @@ -121,7 +121,7 @@ describe('ol.interaction.MouseWheelZoom', function() { const event = new MapBrowserEvent('wheel', map, { type: 'wheel', deltaMode: WheelEvent.DOM_DELTA_LINE, - deltaY: 3.714599609375, + deltaY: 20, target: map.getViewport(), preventDefault: Event.prototype.preventDefault }); @@ -140,7 +140,7 @@ describe('ol.interaction.MouseWheelZoom', function() { const event = new MapBrowserEvent('wheel', map, { type: 'wheel', - deltaY: 120, + deltaY: 300, target: map.getViewport(), preventDefault: Event.prototype.preventDefault });