我有一组带有绑定弹出窗口的标记,但是当在图层控件中切换标记组时,我无法弄清楚如何显示所有弹出窗口。
例如,我有我的标记:
var testMarker = L.marker([32.9076,33.35449]).bindPopup('Marker 1');
var testMarkerTwo = L.marker([33.58259,34.64539]).bindPopup('Marker 2');
然后,我把它放在一个freature组中并附加
openPopup
方法:
var markerGroup = L.featureGroup([testMarker,testMarkerTwo]).openPopup().addTo(map);
这不起作用。
我的最终目标是将该featureGroup添加到我的图层控件中,我可以在其中切换/打开该组。在我开始讨论之前,我首先需要了解openPopup方法无法正常工作的原因。
编辑:以下答案似乎只适用于简单的Leaflet API,而不适用于Mapbox API。
答案 0 :(得分:1)
这里有几个问题。第一个是默认情况下,Leaflet每次打开另一个时关闭先前打开的弹出窗口。第二个是,虽然你的标记有弹出窗口绑定到它们,markerGroup
没有,即使它,markerGroup.openPopup
只会导致一个弹出窗口打开。
要解决第一个问题,您可以使用this answer中的黑客攻击。如果将以下代码放在脚本的开头(在定义map
之前),它将覆盖默认行为并允许您一次打开多个弹出窗口:
L.Map = L.Map.extend({
openPopup: function(popup) {
this._popup = popup;
return this.addLayer(popup).fire('popupopen', {
popup: this._popup
});
}
});
然后,一旦您能够打开多个弹出窗口,就可以使用markerGroup
方法打开eachLayer
中的所有弹出窗口:
var markerGroup = L.featureGroup([testMarker,testMarkerTwo]).addTo(map);
markerGroup.eachLayer(function(layer) {
layer.openPopup();
});
这是一个小例子: