繁星點點滴滴
2023-11-02 16:57:28
我有很多標記,所以我將它們聚集在一起。我遇到了問題,當用戶從集群中縮小時,我想保持彈出窗口打開,我找到了這個解決方案https://jsfiddle.net/sghL4z96/65/Leaflet Markercluster:從聚類中免除標記效果很好。但問題是當標記離簇本身太近時,當我嘗試使用相同的解決方案時,我得到了這個結果https://jsfiddle.net/s2mnvL5w/3/當我單擊群集時,會顯示兩個標記。例如,如果我單擊左側標記,則會彈出文本一。當我關閉此彈出窗口時,我會再次嘗試打開左側標記,然后會彈出文本二是錯誤的。相反,我得到了一個。我的錯誤在哪里,希望解決方案可以調整為坐標非常接近的標記。clustered.on('popupopen', function(e) { console.log('open'); const m = e.popup._source; clustered.removeLayer(m); unclustered.addLayer(m); m.openPopup();});unclustered.on('popupclose', function(e) { console.log('close'); let m = e.popup._source; unclustered.removeLayer(m); clustered.addLayer(m); m.closePopup();});
1 回答

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
這是因為您從組中刪除了該圖層clustered。再次將其添加到組后,它就有了新的訂單。
你可以這樣做:
let popup;
const mkMarker = function(lat, lng, txt) {
const m = L.marker(L.latLng(lat, lng));
m.addTo(clustered);
m.popupText = txt;
m.on('click',(e)=>{
var marker = e.target;
var latlng = marker.getLatLng();
var offset = [0,0];
if(marker._preSpiderfyLatlng){
latlng = marker._preSpiderfyLatlng;
}else{
offset= marker.options.icon.options.popupAnchor;
}
popup = L.popup({offset: offset}).setContent(marker.popupText).setLatLng(latlng).addTo(map)
})
return m;
};
并去掉popupopen/close監聽函數
添加回答
舉報
0/150
提交
取消