Leaflet.js: открыть все всплывающие окна при загрузке страницы - PullRequest
12 голосов
/ 28 января 2012

Я пытаюсь понять из документов Leaflet.js, как можно было бы открыть более одного всплывающего окна при показе страницы.Например, если бы у каждого было три маркера (каждый из которых представлял здание), у каждого сразу открывалось бы его всплывающее окно.

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

загадочно говорит:

"ИспользоватьОтобразите карту # openPopup для открытия всплывающих окон, убедившись, что только одно всплывающее окно открыто одновременно (рекомендуется для удобства использования), или используйте Map # addLayer, чтобы открывать столько, сколько хотите. "

, но

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

не дает никаких подсказок о том, как это может быть достигнуто.

Может кто-нибудь уточнить, возможно ли это, и дать какие-либо советы о том, как это сделать?

Ответы [ 5 ]

10 голосов
/ 23 мая 2013
L.Map = L.Map.extend({
    openPopup: function(popup) {
        // this.closePopup(); 
        this._popup = popup;
        return this.addLayer(popup).fire('popupopen', {
            popup: this._popup
        });
    }
});

пример: http://jsfiddle.net/paulovieira/yVLJf/

нашел его здесь: https://groups.google.com/forum/#!msg/leaflet-js/qXVBcD3juL4/4pZXHTv1baIJ

10 голосов
/ 29 января 2012

Вы должны добавить всплывающие окна в качестве слоя. Попробуйте с этим примером кода:

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);
6 голосов
/ 25 октября 2016
marker.addTo(myMap).bindPopup('Hello popup', {autoClose:false}).openPopup();

использовать опцию автозаполнения

0 голосов
/ 09 сентября 2016

В последней версии есть опция 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();
0 голосов
/ 14 мая 2014

Тривиальным решением является удаление всплывающей ссылки с объекта карты при открытии:

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