[OpenLayers-Users] Full-screen toggle
Slawomir Messner
slawomir.messner at staff.uni-marburg.de
Wed May 4 08:57:41 EDT 2011
Hi,
this is our control. It uses jQuery for animation and has a pin map function, when a user doesn't want to pan or zoom. I shorten the comments I hope it's self-explaining.
OpenLayers.Control.MinimizeMaximizeMapControl = OpenLayers.Class(OpenLayers.Control,
{
EVENT_TYPES: ["minimizedMap","maximizedMap","pinned","unpinned"],
minimizeDiv:null,
maximizeDiv:null,
pinMapDiv:null,
mapPinned:false,
initialize:function (options) {
this.EVENT_TYPES =
OpenLayers.Control.MinimizeMaximizeMapControl.prototype.EVENT_TYPES.concat(
OpenLayers.Control.prototype.EVENT_TYPES);
OpenLayers.Control.prototype.initialize.apply(this, [options]);
},
destroy:function () {
OpenLayers.Event.stopObservingElement(this.minimizeDiv);
OpenLayers.Event.stopObservingElement(this.maximizeDiv);
OpenLayers.Control.prototype.destroy.apply(this, arguments);
},
draw:function () {
var div = OpenLayers.Control.prototype.draw.apply(this, arguments);
div.style.top ="0px";
div.style.right ="0px";
div.style.width ="81px";
div.style.height ="24px";
this.maximizeDiv = document.createElement("div");
this.minimizeDiv = document.createElement("div");
this.pinMapDiv = document.createElement("div");
this.maximizeDiv.className ="maximizeDiv";
this.minimizeDiv.className ="minimizeDiv";
this.pinMapDiv.className ="pinDiv";
this.maximizeDiv.title ="Karte maximieren";
this.minimizeDiv.title ="Karte minimieren";
this.pinMapDiv.title ="Karte festhalten";
OpenLayers.Event.observe(this.pinMapDiv,"click", OpenLayers.Function.bindAsEventListener(this.pinMap,this));
OpenLayers.Event.observe(this.pinMapDiv,"mouseup", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop,this));
OpenLayers.Event.observe(this.pinMapDiv,"mousedown", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop,this));
div.appendChild(this.pinMapDiv);
OpenLayers.Event.observe(this.minimizeDiv,"click", OpenLayers.Function.bindAsEventListener(this.minimizeWindow,this));
OpenLayers.Event.observe(this.minimizeDiv,"mouseup", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop,this));
OpenLayers.Event.observe(this.minimizeDiv,"mousedown", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop,this));
div.appendChild(this.minimizeDiv);
OpenLayers.Event.observe(this.maximizeDiv,"click", OpenLayers.Function.bindAsEventListener(this.maximizeWindow,this));
OpenLayers.Event.observe(this.maximizeDiv,"mouseup", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop,this));
OpenLayers.Event.observe(this.maximizeDiv,"mousedown", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop,this));
div.appendChild(this.maximizeDiv);
return div;
},
pinMap:function (evt) {
this.mapPinned = !this.mapPinned;
this.setNavigationControls();
this.events.triggerEvent(this.mapPinned ?"pinned" :"unpinned");
},
setNavigationControls:function () {
var movecontrols =this.map.getControlsByClass("OpenLayers.Control.Navigation").concat(
this.map.getControlsByClass("OpenLayers.Control.PanZoom"),
this.map.getControlsByClass("OpenLayers.Control.PanZoomBar"),
this.map.getControlsByClass("OpenLayers.Control.PanPanel"),
this.map.getControlsByClass("OpenLayers.Control.NavToolbar"),
this.map.getControlsByClass("OpenLayers.Control.ZoomBox"),
this.map.getControlsByClass("OpenLayers.Control.ZoomPanel"));
for (var i = 0; i< movecontrols.length; i++) {
if (this.mapPinned) {
movecontrols[i].deactivate();
}else {
movecontrols[i].activate();
}
}
this.pinMapDiv.className =this.mapPinned ?"pinPinnedDiv" :"pinDiv";
},
minimizeWindow:function (evt) {
if (!this.mapPinned) {
jQuery("#mapOpenLayer").animate({ height:"400px", width:"958px" }, 600);
jQuery("#wrapheader").animate({ height:"100px" },"slow");
jQuery(".sitelogo").animate({ height:"90px" },"slow");
jQuery(".adw").animate({ height:"80px" },"slow");
jQuery(".AspNet-Menu-Horizontal").animate({ width:"960px" },"slow");
jQuery("#wrapwebsite").animate({ width:"960px" },"slow");
tempMap =this.map;
setTimeout("tempMap.updateSize()", 700);
this.events.triggerEvent("minimizedMap");
if (evt !=null) {
OpenLayers.Event.stop(evt);
}
}
},
maximizeWindow:function (evt) {
if (!this.mapPinned) {
jQuery("#mapOpenLayer").animate({ height: (jQuery(window).height() - 85) +"px", width: Math.max(960, (jQuery(window).width() - 220)) +"px" }, 600);
jQuery("#wrapheader").animate({ height:"0px" },"slow");
jQuery(".sitelogo").animate({ height:"0px" },"slow");
jQuery(".adw").animate({ height:"0px" },"slow");
jQuery(".AspNet-Menu-Horizontal").animate({ width: Math.max(960, (jQuery(window).width() - 220)) +"px" },"slow");
jQuery("#wrapwebsite").animate({ width: Math.max(960, (jQuery(window).width() - 220)) +"px" },"slow");
tempMap =this.map;
setTimeout("tempMap.updateSize()", 700);
this.events.triggerEvent("maximizedMap");
if (evt !=null) {
OpenLayers.Event.stop(evt);
}
}
},
CLASS_NAME:"OpenLayers.Control.MinimizeMaximizeMapControl"
});
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20110504/ee3492fc/attachment-0001.html
More information about the Users
mailing list