同时打开几个弹出窗口

时间:2016-10-01 23:37:04

标签: javascript leaflet

在jquery $ .getJSON调用中,我创建了几个标记和弹出窗口,然后将弹出窗口绑定到标记:

$.each(points, function(index, p) {
   var marker = L.marker(L.latLng(p.lat, p.lon), { title: p.text });
   var popup = L.popup().setContent(p.text);
   marker.bindPopup(popup);
}

我想在地图加载后打开标记上的所有弹出窗口(如果可能的话,保持打开状态)。 Leaflet 1.0文档说明:“使用Map.openPopup ...或使用Map.addLayer打开任意数量的内容。” (见leaflet - popup)。

如果可能的话,我宁愿使用“内置”解决方案来解决我必须摆弄的问题(例如在SO - keep popups open中)。一个优点是可以一般地使用该方法,例如也打开所有工具提示。它可能会帮助我更好地理解图层。

我尝试过使用LayerGroups和FeatureGroups的几种方法无济于事。你会如何一次打开一组弹出窗口?

1 个答案:

答案 0 :(得分:1)

您可以使用包含所有弹出窗口的layerGroup。这样,您就拥有了弹出窗口组控制的所有功能。

我在JSfidle(https://jsfiddle.net/vaillant/f4zpr6us/)上复制了一个基本示例,但您可以想象只从layerGroup中删除某些弹出窗口而不是一次删除所有弹出窗口。以下是代码的关键部分:

var popup_layer = new L.layerGroup();

$.each(testData, function(index, p) {
   var marker = L.marker(L.latLng(p.lat, p.lon));
   marker.addTo(map);
   popup = new L.popup({offset:  new L.Point(0, -30)});
   popup.setLatLng(L.latLng(p.lat, p.lon));
   popup.setContent(p.text);
   popup.openPopup();
   popup_layer.addLayer(popup);
});

popup_layer.addTo(map);