aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2013-09-11 15:26:33 +0100
committerStruan Donald <struan@exo.org.uk>2013-09-11 15:30:29 +0100
commitef347da8749ba59d409be69c3ac3854074b1a32d (patch)
tree73643651e895f2373d171070a40fff916aea7ae2
parent7bfae47d487ba362919c50f42f5388251b98cb40 (diff)
prevent map zoom snapback effect
Overload PinchZoom control to check if we are at the limits of zoom and if so ignore any pinch zoom that tries to go past those limits. This stops the visual glitch of the zoom sort of working and then snaping back and also gives a visual indication of when the zoom limits have been reached. Fixes #118
-rw-r--r--src/js/map-OpenLayers.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/js/map-OpenLayers.js b/src/js/map-OpenLayers.js
index f120391..f6bc663 100644
--- a/src/js/map-OpenLayers.js
+++ b/src/js/map-OpenLayers.js
@@ -406,3 +406,28 @@ OpenLayers.Control.ActionAfterDrag = OpenLayers.Class(OpenLayers.Control, {
}
}
});
+
+
+// Overload the PinchZoom control so we can stop zoom snapback when we
+// reach the limit of zooming
+OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control.PinchZoom,{
+ pinchMove: function(evt,pinchData) {
+ var maxZoom = fixmystreet.numZoomLevels - 1;
+ var scale = pinchData.scale;
+ var containerOrigin = this.containerOrigin;
+ var pinchOrigin = this.pinchOrigin;
+ var current = evt.xy;
+ var dx = Math.round((current.x-pinchOrigin.x) + (scale-1) * (containerOrigin.x-pinchOrigin.x));
+ var dy = Math.round((current.y-pinchOrigin.y) + (scale-1) * (containerOrigin.y-pinchOrigin.y));
+
+ // if we are at the limits of the zoom then do nothing to stop zoom snapback effect
+ var mapZoom = this.map.getZoom();
+ if ( ( ( dx < 0 || dy < 0 ) && mapZoom == maxZoom ) || ( ( dx > 0 || dy > 0 ) && mapZoom == 0 ) ) {
+ return false;
+ }
+
+ this.applyTransform("translate("+dx+"px, "+dy+"px) scale("+scale+")");
+ this.currentCenter=current;
+ },
+ CLASS_NAME: "OpenLayers.Control.PinchZoom"
+});