在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的几种方法无济于事。你会如何一次打开一组弹出窗口?
答案 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);