#1 Tue 23 November 2010 09:50
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
[OpenLayers] controle click et barre d'outils
Bonjour,
J'ai un objet panel dans lequel je met des contrôles pour interagir avec ma carte. j'ai un contrôle Pan et un contrôle ZoomBox.
Code:
toolbar = new OpenLayers.Control.Panel({div: document.getElementById("toolbuttons")}); nav = new OpenLayers.Control.NavigationHistory({id: 'navCtrl', 'displayClass': 'olControlNavigationHistory', title:'Historique'}); nav.previousOptions = {title:'Précédent'}; controls = { move : new OpenLayers.Control.Navigation({id: 'moveCtrl', 'displayClass': 'olControlNavigation', title:'Pan'}), zbox : new OpenLayers.Control.ZoomBox({id: 'zboxCtrl', 'displayClass': 'olControlZoomBox', title:'Zoom Box'}), fullExtent : new OpenLayers.Control.ZoomToMaxExtent({id: 'fExtentCtrl', 'displayClass': 'olControlFullExtent', title:'Full extent'}) } for (var key in controls) { toolbar.addControls([controls[key]]); } map.addControl(toolbar); toolbar.activateControl(controls.move);
Je défini un contrôle Click sur ma carte qui doit afficher un popup à l'endroit où on a cliqué:
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.trigger}, this.handlerOptions ); }, trigger: function(e) { var lonlat = map.getLonLatFromViewPortPx(e.xy); try { map.removePopup(popup); popup.destroy(); popup = null; } catch(error){} if (toolbar.controls[0].active==true) {showPopup(lonlat);} } }); // fin OpenLayers.Control.Click var click = new OpenLayers.Control.Click(); map.addControl(click); click.activate();
par défaut, le contrôle Pan est activé, quand je clique sur la carte, j'ai bien le popup qui s'affiche.
mais si j'utilise le contrôle ZoomBox, et que je clique ensuite sur le bouton Pan pour utiliser ce contrôle, quand je clique sur la carte, rien ne se passe.
Pourquoi?
Merci,
Nico
Hors ligne
#2 Tue 23 November 2010 09:56
Re: [OpenLayers] controle click et barre d'outils
Bonjour,
Je pense que quand tu cliques sur le bouton zoombox, celui-ci désactive les autres contrôle. Quand tu cliques sur le bouton pan après, celui-ci n'active pas le contrôle "click". Le contrôle "click" est seulement activé au chargement de la page.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Tue 23 November 2010 16:02
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: [OpenLayers] controle click et barre d'outils
j'ai rajouté un événement sur le contrôle zoomBox pour réactiver le controle click :
Code:
controls.zbox.events.on({ 'deactivate': function(evt) { var click = new OpenLayers.Control.Click(); map.addControl(click); click.activate(); } });
du coup, quand je reprend le controle pan, j'ai bien un popup qui s'affiche, mais quand je veux le fermer, il y en a un autre qui s'ouvre à l'endroit où j'ai cliqué sur la croix 'close' du premier popup, et ainsi de suite ...
une idée de solution?
Nico
Hors ligne