如何在Leaflet标记中同时打开多个弹出窗口

8

像这样的地图:

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

但是我正在使用leaflet。有没有办法扩展,以便我可以防止关闭我的标记弹出窗口?

L.mapbox.accessToken = constant.accessToken;
var map = L.mapbox.map('map', 'mapbox.streets', {zoomControl: true});
3个回答

19

2017 年 12 月更新:Leaflet 弹出框选项 已扩展,包括 { autoClose: false },可以起到所需的效果:

 var my_marker = L.marker([my_lat, my_lng], {icon: my_icon})
                  .addTo(map)
                  .bindPopup('My Popup HTML', {closeOnClick: false, autoClose: false});

6
让我引用 Leaflet对于L.Popup的文档

用于在地图上某些位置打开弹出窗口。使用 Map.openPopup 打开弹出窗口,确保一次只能打开一个弹出窗口(建议这样做以提高可用性),或使用 Map.addLayer 打开多个弹出窗口。

为了打开多个弹出窗口,请使用 L.popup(latlng, options) 实例化它们,然后使用 .addTo(map) 添加到地图中。


0

定义一个数组:

let map=L.map('mymap');
...    
var markers = L.markerClusterGroup();

...

var marker=[];
marker[0]= L.marker([latitud1,longitud1]).addTo(map).bindPopup('Hola 0',{autoClose: false, closeOnClick: false});
marker[1]= L.marker([latitud2,longitud2]).addTo(map).bindPopup('Hola 1',{autoClose: false, closeOnClick: false});

放在地图上:

marker.forEach(function(marker) {
       markers.addLayer(marker);
       map.addLayer(markers);
});

只为一个显示弹出窗口:

var curPos = marker[0].getLatLng();
map.setView(new L.LatLng(curPos.lat,curPos.lng), 13);
marker[0].openPopup();

显示所有弹出窗口:
marker.forEach(function(marker) {
     var popup = marker.getPopup();
     marker.bindPopup(popup.getContent()).openPopup();
 });

关闭所有弹窗:

 map.eachLayer(function (layer) {
      layer.closePopup();
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接