"Always zoom in/out while drawing the zoom box." Patch from jachym, tested
and example added by vdeparday. r=me. (Closes #1771) git-svn-id: http://svn.openlayers.org/trunk/openlayers@8977 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
78
examples/navtoolbar-alwaysZoom.html
Normal file
78
examples/navtoolbar-alwaysZoom.html
Normal file
@@ -0,0 +1,78 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>A navToolbar with an alwaysZoom ZoomBox</title>
|
||||
<link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
|
||||
<link rel="stylesheet" href="style.css" type="text/css" />
|
||||
<!-- Override the position of the toolbar to make it fit in a small map -->
|
||||
<style type='text/css'>
|
||||
.olControlNavToolbar div {
|
||||
top: 150px;
|
||||
}
|
||||
</style>
|
||||
<script src="../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
function init() {
|
||||
|
||||
//Creation of a custom panel with a ZoomBox control with the alwaysZoom option sets to true
|
||||
OpenLayers.Control.CustomNavToolbar = OpenLayers.Class(OpenLayers.Control.Panel, {
|
||||
|
||||
/**
|
||||
* Constructor: OpenLayers.Control.NavToolbar
|
||||
* Add our two mousedefaults controls.
|
||||
*
|
||||
* Parameters:
|
||||
* options - {Object} An optional object whose properties will be used
|
||||
* to extend the control.
|
||||
*/
|
||||
|
||||
|
||||
initialize: function(options) {
|
||||
OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]);
|
||||
this.addControls([
|
||||
new OpenLayers.Control.Navigation(),
|
||||
//Here it come
|
||||
new OpenLayers.Control.ZoomBox({alwaysZoom:true})
|
||||
]);
|
||||
// To make the custom navtoolbar use the regular navtoolbar style
|
||||
this.displayClass = 'olControlNavToolbar'
|
||||
},
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Method: draw
|
||||
* calls the default draw, and then activates mouse defaults.
|
||||
*/
|
||||
draw: function() {
|
||||
var div = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
|
||||
this.activateControl(this.controls[0]);
|
||||
return div;
|
||||
},
|
||||
});
|
||||
|
||||
var map;
|
||||
|
||||
map = new OpenLayers.Map('map');
|
||||
|
||||
var wms = new OpenLayers.Layer.WMS(
|
||||
"OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0",
|
||||
{layers: 'basic'}
|
||||
);
|
||||
|
||||
map.addLayers([wms]);
|
||||
map.zoomToMaxExtent();
|
||||
|
||||
var panel = new OpenLayers.Control.CustomNavToolbar();
|
||||
map.addControl(panel);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
<h1 id="title">A navToolbar with an alwaysZoom ZoomBox</h1>
|
||||
<p id="shortdesc">
|
||||
Demo of a custom NavToolbar which uses a zoomBox tool that always zoom in even when the zoom box is too big.
|
||||
</p>
|
||||
<div id="map" class="smallmap"> </div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -29,6 +29,12 @@ OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
|
||||
*/
|
||||
out: false,
|
||||
|
||||
/**
|
||||
* Property: alwaysZoom
|
||||
* {Boolean} Always zoom in/out, when box drawed
|
||||
*/
|
||||
alwaysZoom: false,
|
||||
|
||||
/**
|
||||
* Method: draw
|
||||
*/
|
||||
@@ -66,7 +72,12 @@ OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
|
||||
var ymax = center.lat + (extent.getHeight()/2)*zoomFactor;
|
||||
var bounds = new OpenLayers.Bounds(xmin, ymin, xmax, ymax);
|
||||
}
|
||||
// always zoom in/out
|
||||
var lastZoom = this.map.getZoom();
|
||||
this.map.zoomToExtent(bounds);
|
||||
if (lastZoom == this.map.getZoom() && this.alwaysZoom == true){
|
||||
this.map.zoomTo(lastZoom + (this.out ? -1 : 1));
|
||||
}
|
||||
} else { // it's a pixel
|
||||
if (!this.out) {
|
||||
this.map.setCenter(this.map.getLonLatFromPixel(position),
|
||||
|
||||
Reference in New Issue
Block a user