In order to do this without modifying the actual source code for openlayers (which you won't be doing if you're using a minified version, which by default you probably are), look at this answer.
However, I had to change it slightly for my code, which is using OpenLayers 2.11
OpenLayers.Control.PanZoom.prototype.buttonDown = function(evt) {
var btn = evt.currentTarget ? evt.currentTarget : this;
switch (btn.action) {
case "panup":
this.map.pan(0, -this.getSlideFactor("h"));
break;
case "pandown":
this.map.pan(0, this.getSlideFactor("h"));
break;
case "panleft":
this.map.pan(-this.getSlideFactor("w"), 0);
break;
case "panright":
this.map.pan(this.getSlideFactor("w"), 0);
break;
case "zoomin":
this.map.zoomIn();
break;
case "zoomout":
this.map.zoomOut();
break;
case "zoomworld":
alert("Hello world!");
break;
}
};
The only difference between this code and the one in the answer linked is that instead of onButtonClick
, we're using buttonDown
, and rather than evt.buttonElement
, we're using evt.currentTarget
EDIT: Internet Explorer has no currentTarget
property in their event handling. Luckily, we can use this
instead. I have modified the code above accordingly. For an explanation of this, please see this article. A relevant stackoverflow question is here.
Best Answer
Provided that you are not using a third party map with fixed zoom levels (e.g. Google, Bing, OSM etc) you can set the scales or resolutions array of your map to what ever you would like - see the documentation for full details.