Fractional zoom changes in WHEEL mode

This commit is contained in:
Andreas Hocevar
2020-02-14 13:49:08 +01:00
parent ea5c91e19e
commit f3ce8e23b4
2 changed files with 13 additions and 6 deletions

View File

@@ -130,7 +130,7 @@ class MouseWheelZoom extends Interaction {
* @private * @private
* @type {number} * @type {number}
*/ */
this.trackpadDeltaPerZoom_ = 300; this.deltaPerZoom_ = 300;
} }
@@ -220,7 +220,7 @@ class MouseWheelZoom extends Interaction {
view.beginInteraction(); view.beginInteraction();
} }
this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.trackpadEventGap_); 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; this.startTime_ = now;
return false; return false;
} }
@@ -244,8 +244,15 @@ class MouseWheelZoom extends Interaction {
if (view.getAnimating()) { if (view.getAnimating()) {
view.cancelAnimations(); view.cancelAnimations();
} }
const delta = clamp(this.totalDelta_, -this.maxDelta_, this.maxDelta_); let delta = -clamp(this.totalDelta_, -this.maxDelta_ * this.deltaPerZoom_, this.maxDelta_ * this.deltaPerZoom_) / this.deltaPerZoom_;
zoomByDelta(view, -delta, this.lastAnchor_, this.duration_); 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.mode_ = undefined;
this.totalDelta_ = 0; this.totalDelta_ = 0;
this.lastAnchor_ = null; this.lastAnchor_ = null;

View File

@@ -121,7 +121,7 @@ describe('ol.interaction.MouseWheelZoom', function() {
const event = new MapBrowserEvent('wheel', map, { const event = new MapBrowserEvent('wheel', map, {
type: 'wheel', type: 'wheel',
deltaMode: WheelEvent.DOM_DELTA_LINE, deltaMode: WheelEvent.DOM_DELTA_LINE,
deltaY: 3.714599609375, deltaY: 20,
target: map.getViewport(), target: map.getViewport(),
preventDefault: Event.prototype.preventDefault preventDefault: Event.prototype.preventDefault
}); });
@@ -140,7 +140,7 @@ describe('ol.interaction.MouseWheelZoom', function() {
const event = new MapBrowserEvent('wheel', map, { const event = new MapBrowserEvent('wheel', map, {
type: 'wheel', type: 'wheel',
deltaY: 120, deltaY: 300,
target: map.getViewport(), target: map.getViewport(),
preventDefault: Event.prototype.preventDefault preventDefault: Event.prototype.preventDefault
}); });