There is no way to do this with OL 2.11, so you need to change OpenLayers URL from http://openlayers.org/api/OpenLayers.js to http://openlayers.org/dev/OpenLayers.js and use the following code:
<html>
<head>
<style>
#map { width: 800px; height: 600px; }
</style>
<script src="http://openlayers.org/dev/OpenLayers.js"></script>
<script type="text/javascript">
function init(){
var layer = new OpenLayers.Layer.OSM(
"OpenStreet Maps", null, {
resolutions: [19567.87923828125, 9783.939619140625,
4891.9698095703125, 2445.9849047851562, 1222.9924523925781,
611.4962261962891, 305.74811309814453, 152.87405654907226,
76.43702827453613, 38.218514137268066, 19.109257068634033,
9.554628534317017, 4.777314267158508, 2.388657133579254,
1.194328566789627, 0.5971642833948135, 0.29858214169740677,
0.14929107084870338, 0.07464553542435169],
serverResolutions: [156543.03390625, 78271.516953125,
39135.7584765625, 19567.87923828125, 9783.939619140625,
4891.9698095703125, 2445.9849047851562, 1222.9924523925781,
611.4962261962891, 305.74811309814453, 152.87405654907226,
76.43702827453613, 38.218514137268066, 19.109257068634033,
9.554628534317017, 4.777314267158508, 2.388657133579254,
1.194328566789627, 0.5971642833948135, 0.29858214169740677,
0.14929107084870338, 0.07464553542435169]
}
);
var extent = [-1500000, 4000000, 5600000, 11000000];
var map = new OpenLayers.Map({
div: 'map',
layers: [layer],
maxExtent: extent,
restrictedExtent: extent,
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.Scale()
]
});
map.zoomToMaxExtent();
}
</script>
</head>
<body onload="init()">
<div id="map"></div>
</body>
</html>
It should work as you expected.
I've used this event successfully. A delay method similar to the one here can help any thrashing. The actual method looks like this:
delay: function( timeout, id, callback )
{
this.delays = this.delays || [];
var delay = this.delays[ id ];
if ( delay )
{
clearTimeout ( delay );
}
delay = setTimeout ( callback, timeout );
this.delays[ id ] = delay;
}
Usage Example:
delay(1000, "uniqueId", function() {
getValues(map.getCenter());
});
I suspect your getValues method is modifying the map causing the moveend event to fire.
Best Answer
Vadim is right. you can do it with registering map moveend and zoomend events.
i hope it helps you...