单击标记时打开错误的弹出窗口

我有很多标记,所以我将它们聚集在一起。我遇到了问题,当用户从集群中缩小时,我想保持弹出窗口打开,我找到了这个解决方案


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();

});


繁星点点滴滴
浏览 49回答 1
1回答

德玛西亚99

这是因为您从组中删除了该图层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监听函数
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript