传单弹出窗口不能改变位置

Leaflet popup can't change position

我想更新我的 leaflet popup 职位。原因是,当我点击广义多段线(因为缩放级别较低)然后缩放到点击位置时,我的点击位置并不完全在对象上,因此我的弹出位置也不完全在对象上。

function zoomToFeature(e) {
        console.log("ZOOM TO FEATURE");
        // Set new selection
        selected = e.target;
        clickposition = e.latlng;
        console.log("Selected layer:");
        console.log(selected);
        console.log("My clickposition: " + clickposition);
        let closest_latlng = L.GeometryUtil.closest(mymap, selected.getLatLngs(), clickposition)
        console.log("New Latlng calculated: " + closest_latlng);
        var popup = selected.getPopup();          
        console.log("SET LATLNG");
        popup.setLatLng(closest_latlng).openOn(mymap).update();
        console.log("Popup: ")
        console.log(popup);
        console.log("Popup getLatLng: ")
        console.log(popup.getLatLng());
    }

这就是我的输出:

真的很奇怪,我的弹出对象具有来自点击位置的旧 latlng 值。但是当我打印方法“getLatLng()”时,就会显示新的计算值。问题是,在地图上,弹出窗口也显示在 clickposition 上,而不是我新计算的位置上。我的问题是,如何正确更新弹出窗口的位置?

我发现了问题,它与我实际想的完全不同...所以我 post 在这里,也许它对其他人也有帮助。

问题是我的点击事件 zoomToFeature(e) 是事件顺序中的第一个事件。在此事件之后是默认的传单 _openPopup(t) 事件。这个默认 _openPopup(t) 事件然后重置了我的弹出窗口位置。

现在我查看了创建弹出内容的部分。因为内容是通过 ajax 调用创建的,所以我现在等到内容完全加载并使用 layer.bindPopup(popup); 绑定到我的图层之后,我添加了自定义点击事件 zoomToFeature(e)

我在图层上的事件顺序现在是这样的: