add an option to make the pinchZoom constrain zoom levels to integers

Changes the default behavior of ol.interaction.PinchZoom to keep
the fractional zoom level after the gesture.
The old behavior of zooming to the next whole-number level can be
enforced with the new parameter `constrainResolution`.
This commit is contained in:
Axel Utech
2016-12-09 18:02:36 +01:00
parent f795019215
commit 321b1f72ad
2 changed files with 23 additions and 8 deletions

View File

@@ -3104,6 +3104,13 @@ olx.interaction.PinchZoomOptions;
*/ */
olx.interaction.PinchZoomOptions.prototype.duration; olx.interaction.PinchZoomOptions.prototype.duration;
/**
* Zoom to the closest integer zoom level after the pinch gesture ends. Default is `false`.
* @type {boolean|undefined}
* @api
*/
olx.interaction.PinchZoomOptions.prototype.constrainResolution;
/** /**
* @typedef {{handleDownEvent: (function(ol.MapBrowserPointerEvent):boolean|undefined), * @typedef {{handleDownEvent: (function(ol.MapBrowserPointerEvent):boolean|undefined),

View File

@@ -27,6 +27,12 @@ ol.interaction.PinchZoom = function(opt_options) {
var options = opt_options ? opt_options : {}; var options = opt_options ? opt_options : {};
/**
* @private
* @type {boolean}
*/
this.constrainResolution_ = options.constrainResolution || false;
/** /**
* @private * @private
* @type {ol.Coordinate} * @type {ol.Coordinate}
@@ -111,13 +117,15 @@ ol.interaction.PinchZoom.handleUpEvent_ = function(mapBrowserEvent) {
var map = mapBrowserEvent.map; var map = mapBrowserEvent.map;
var view = map.getView(); var view = map.getView();
view.setHint(ol.View.Hint.INTERACTING, -1); view.setHint(ol.View.Hint.INTERACTING, -1);
var resolution = view.getResolution(); if (this.constrainResolution_) {
// Zoom to final resolution, with an animation, and provide a var resolution = view.getResolution();
// direction not to zoom out/in if user was pinching in/out. // Zoom to final resolution, with an animation, and provide a
// Direction is > 0 if pinching out, and < 0 if pinching in. // direction not to zoom out/in if user was pinching in/out.
var direction = this.lastScaleDelta_ - 1; // Direction is > 0 if pinching out, and < 0 if pinching in.
ol.interaction.Interaction.zoom(map, view, resolution, var direction = this.lastScaleDelta_ - 1;
this.anchor_, this.duration_, direction); ol.interaction.Interaction.zoom(map, view, resolution,
this.anchor_, this.duration_, direction);
}
return false; return false;
} else { } else {
return true; return true;