为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 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监听函数


查看完整回答
反对 回复 2023-11-02
  • 1 回答
  • 0 关注
  • 44 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信