Making the pointer position the zoom origin.

This commit is contained in:
ahocevar
2012-06-23 14:22:54 +02:00
parent d391c65ac6
commit c656bac601

View File

@@ -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;
};