2012-01-28 9 views
9

Próbuję dowiedzieć się z dokumentacji Leaflet.js, jak byłoby możliwe otwarcie więcej niż jednego popup po wyświetleniu strony. Na przykład, jeśli ktoś ma trzy znaczniki (każdy reprezentuje budynek), każde z nich będzie miało natychmiast otwarte okienko wyskakujące.Leaflet.js: Otwórz wszystkie bańki wyskakujące na stronie ładowanie

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

tajemniczo mówi:

„Use Map # openPopup aby otworzyć wyskakujące okienka podczas upewniając się, że tylko jedno okienko jest otwarte w jednym czasie (zalecane dla użyteczność), albo używać map # addLayer otworzyć jako wielu jak tylko chcesz. "

ale

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

daje żadnych wskazówek o tym, jak to może być osiągalne.

Czy ktoś może wyjaśnić, jeśli jest to możliwe, i podać wskazówki, jak to zrobić?

Odpowiedz

9

Musisz dodać wyskakujące okienka jako warstwę. Spróbuj z tym kodem przykład:

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

Excellent - Naprawdę doceniam ten przykład. Czy mam rację, myśląc, że nie ma sposobu, aby mieć tam zarówno ikony, jak i wyskakujące okienka? – fooquency

+0

Cześć, nie wiem. Postaraj się zamieścić w nowych oficjalnych grupach ulotek: https://groups.google.com/forum/#!forum/leaflet-js – aborruso

+0

Poniższa odpowiedź z rozszerzeniem Class jest o wiele lepszym rozwiązaniem i powinna być zaakceptowaną odpowiedzią. – masterchief

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

przykład: http://jsfiddle.net/paulovieira/yVLJf/

go znaleźć tutaj: https://groups.google.com/forum/#!msg/leaflet-js/qXVBcD3juL4/4pZXHTv1baIJ

+0

Czy możesz wyjaśnić, co osiągnie ten fragment kodu? Jest to docenione, jeśli potrafisz to wyjaśnić. –

+1

Edytowałem swoją odpowiedź. Od twórcy: "Możesz" L.Class.Extend "domyślną klasę L.Map, definiując nową metodę openPopup. Ta nowa metoda będzie prostą kopią-wklejką domyślnej, z wyjątkiem części, w której bieżące wyskakujące okienko jest zamknięty (po prostu skomentuj tę linię). " – gies0r

+0

Wielkie dzięki @ gies0r, fragment działa jak urok. – Kartik

-1

rozwiązanie triky jest usunąć odnośnik popup z mapy obiektu na otwarte:

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

Jak to wpłynie na przełączanie/zamknięcie tego popup w przyszłości? – Ethereal

0

W najnowszej wersji istnieje utoZamknij opcję.

Aby mieć zarówno znacznik i okienko otwarte w tym samym czasie, bez dodawania warstw wyraźnie:

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(); 

użycie opcji AutoClose

Powiązane problemy