From c656bac6013ccf7e1631dd2bdd07c883a924266c Mon Sep 17 00:00:00 2001 From: ahocevar Date: Sat, 23 Jun 2012 14:22:54 +0200 Subject: [PATCH] Making the pointer position the zoom origin. --- src/ol/control/Navigation.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/ol/control/Navigation.js b/src/ol/control/Navigation.js index 063cc2e281..ca29d4e8a3 100644 --- a/src/ol/control/Navigation.js +++ b/src/ol/control/Navigation.js @@ -54,14 +54,32 @@ ol.control.Navigation.prototype.moveMap = function(evt) { }; /** - * @param {Object} evt + * @param {Event} evt */ ol.control.Navigation.prototype.zoomMap = function(evt) { var map = this.getMap(), delta = ((evt.deltaY / 3) | 0); - if (Math.abs(delta) > 0) { - map.setZoom(map.getZoom() - delta); + if (Math.abs(delta) === 0) { + return; } + + var currentZoom = /** @type {number} */ (map.getZoom()), + newZoom = currentZoom - delta; + newZoom = Math.max(newZoom, 0); + newZoom = Math.min(newZoom, map.getNumZoomLevels()); + if (newZoom === currentZoom) { + return; + } + var xy = map.getEvents().getPointerPosition(evt), + size = map.getSize(), + newRes = map.getResolutionForZoom(newZoom), + zoomPoint = map.getLocForPixel(xy), + newCenter = new ol.Loc( + zoomPoint.getX() + (size.width/2 - xy.x) * newRes, + zoomPoint.getY() - (size.height/2 - xy.y) * newRes + ); + map.zoomTo(newZoom, newCenter); + evt.preventDefault(); return false; };