2012-01-28 12 views
9

Sto cercando di elaborare dai documenti di Leaflet.js come sarebbe possibile aprire più di un popup visualizzando la pagina. Ad esempio, se uno avesse tre marcatori (ciascuno rappresentante un edificio), ognuno avrebbe il proprio popup aperto immediatamente.Leaflet.js: apre tutte le bolle di popup sul caricamento della pagina

http://leaflet.cloudmade.com/reference.html#popup

dice cripticamente:

"Usa Mappa # openPopup per aprire i popup mentre assicurandosi che solo una comparsa è aperta in una sola volta (consigliato per l'usabilità), oppure utilizzare Mappa # addLayer per aprire come molti come vuoi. "

ma

http://leaflet.cloudmade.com/reference.html#map-addlayer

dà nessun accenno su come questo potrebbe essere realizzabile.

Qualcuno può chiarire se ciò è possibile e fornire suggerimenti su come farlo?

risposta

9

È necessario aggiungere i popup come livello. prova con questo codice di esempio:

var popupLocation1 = new L.LatLng(51.5, -0.09); 
var popupLocation2 = new L.LatLng(51.51, -0.08); 

var popupContent1 = '<p>Hello world!<br />This is a nice popup.</p>', 
popup1 = new L.Popup(); 

popup1.setLatLng(popupLocation1); 
popup1.setContent(popupContent1); 

var popupContent2 = '<p>Hello world!<br />This is a nice popup.</p>', 
popup2 = new L.Popup(); 

popup2.setLatLng(popupLocation2); 
popup2.setContent(popupContent2); 

map.addLayer(popup1).addLayer(popup2); 
+0

eccellente - Ho davvero apprezzato questo esempio. Ho ragione nel pensare che non ci sia modo di avere sia le icone che i popup lì? – fooquency

+0

Ciao fooquency, non lo so. Prova a postare nei nuovi gruppi di volantini ufficiali: https://groups.google.com/forum/#!forum/leaflet-js – aborruso

+0

La risposta seguente utilizzando l'estensione di classe è un approccio molto migliore e dovrebbe essere la risposta accettata – masterchief

10
L.Map = L.Map.extend({ 
    openPopup: function(popup) { 
     // this.closePopup(); 
     this._popup = popup; 
     return this.addLayer(popup).fire('popupopen', { 
      popup: this._popup 
     }); 
    } 
}); 

esempio: http://jsfiddle.net/paulovieira/yVLJf/

trovato qui: https://groups.google.com/forum/#!msg/leaflet-js/qXVBcD3juL4/4pZXHTv1baIJ

+0

Puoi spiegare cosa otterrà questo frammento di codice? È apprezzato se riesci a spiegarlo. –

+1

ho modificato la mia risposta. Dal creatore: "Puoi" L.Class.Extend "la classe L.Map predefinita, definendo un nuovo metodo openPopup.Questo nuovo metodo sarà un semplice copia-incolla di quello predefinito, ad eccezione della parte in cui il popup corrente è chiuso (basta commentare quella riga). " – gies0r

+0

Grazie mille @ gies0r, il frammento funziona come un fascino – Kartik

-1

soluzione Triky è rimuovere popup link da mappa oggetto aperto:

map.on('popupopen', function (e) { 
    delete map._popup; 
}); 
+0

Come questo influisce sulla commutazione/chiudendo quel popup in futuro? – Ethereal

0

Nella versione più recente, c'è un opzione utoClose.

avere sia marcatore e pop-up aperto allo stesso tempo, senza l'aggiunta di strati in modo esplicito: opzione AutoClose

var popup1 = new L.Popup({'autoClose':false}); 
popup1.setLatLng([53.55375, 9.96871]); 
popup1.setContent('First popup'); 

var popup2 = new L.Popup({'autoClose':false}); 
popup2.setLatLng([53.552046, 9.9132]); 
popup2.setContent('Second popup'); 

L.marker([53.55375, 9.96871]).addTo(myMap) 
    .bindPopup(popup1).openPopup(); 

L.marker([53.552046, 9.9132]).addTo(myMap) 
    .bindPopup(popup2).openPopup(); 
5
marker.addTo(myMap).bindPopup('Hello popup', {autoClose:false}).openPopup(); 

uso

Problemi correlati