#1 Sun 08 August 2010 22:47
- lermit
- Juste Inscrit !
- Date d'inscription: 8 Aug 2010
- Messages: 2
[OpenLayers] fermeture popup apres zoo, drag-drop,...
bonjour à tous,
c'est la premier fois que j'utilise de la cartographie dans un site et principalement OpenLayers.
je met en place un menu flottant (popup Anchored) après un clic droit.
le menu s'affiche correctement. Je souhaite avoir de crois de fermeture mais il disparait après clic, dlclic, drag-drop, zoom curseur sortent la carte,...
je met si joint le code que j'ai déjà fait.
j'admets qu'il peut êtres perfectible et les suggestions sont les bien venue.
Code:
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { defaultHandlerOptions: { 'single': true, 'double': false, 'pixelTolerance': 0, 'stopSingle': false, 'stopDouble': false }, initialize: function(options) { this.handlerOptions = OpenLayers.Util.extend( {}, this.defaultHandlerOptions ); OpenLayers.Control.prototype.initialize.apply( this, arguments ); this.handler = new OpenLayers.Handler.Click( this, { 'click': this.onclick }, this.handlerOptions ); }, onclick: function(e) { popup1 = new OpenLayers.Popup.FramedCloud( "popupInfo", map.getLonLatFromViewPortPx(e.xy), new OpenLayers.Size(200,200), "test popupinfo", null, true, null); map.addPopup(popup1,true); } }); var map, controls; //complex object of type OpenLayers.Map function createMap() { var myNavControl = new OpenLayers.Control.Navigation({ handleRightClicks: true }); map = new OpenLayers.Map ("map", { controls:[ myNavControl, //new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Attribution()], maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxResolution: 156543.0399, numZoomLevels: 40, units: 'm', projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326") } ); myNavControl.handlers.click.callbacks.rightclick = function(e) { popup = new OpenLayers.Popup.Anchored( "floatingmenu", map.getLonLatFromViewPortPx(e.xy), new OpenLayers.Size(200,100), "<div id='floatingmenuitem'>Itinéraire à partir de ce lieu</div><div id='floatingmenuitem'>Itinéraire vers ce lieu</div><div id='floatingmenuitem'>Centrer la carte ici</div><div id='floatingmenuitem'>Prevision météo d'ici</div>", null, false, null); map.addPopup(popup,true); } click = new OpenLayers.Control.Click({ handlerOptions: { "single": true } }); var click = new OpenLayers.Control.Click(); map.addControl(click); click.activate(); // Define the map layer // Here we use a predefined layer that will be kept up to date with URL changes layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik"); map.addLayer(layerMapnik); layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender"); map.addLayer(layerTilesAtHome); layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap"); map.addLayer(layerCycleMap); layerMarkers = new OpenLayers.Layer.Markers("Markers"); map.addLayer(layerMarkers); var proj = new OpenLayers.Projection("EPSG:4326"); if (typeof(poseList)!="undefined" && poseList.length > 0) { var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry"); var points = []; for (var i = 0; i < poseList.length; i++) { var point = new OpenLayers.Geometry.Point(poseList[i][1],poseList[i][0]).transform(proj, map.getProjectionObject()); points.push(point); } var geometry = new OpenLayers.Geometry.LineString(points); var feature = new OpenLayers.Feature.Vector(geometry, null, {strokeColor: "red", strokeOpacity: 1, strokeWidth: 5 }); vectorLayer.addFeatures(feature); map.addLayer(vectorLayer); } var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); map.setCenter(lonLat, zoom); }
j'ai pensé que je pourrai fermer le menu à la parte de sont focus mais je ne sais pas s'il est possible.
quelle aurai une idée pour m'aider?
toutes les idée sont les bien venue
merci d'avance de votre aide,
lermit
Hors ligne