首页 > 解决方案 > 传单弹出窗口无法更改位置

问题描述

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

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()”时,会显示新的计算值。问题是,在地图上,弹出窗口也显示在点击位置上,而不是我新计算的位置上。我的问题是,如何正确更新弹出窗口的位置?

标签: javascriptleafletpopup

解决方案


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

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

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

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

在此处输入图像描述


推荐阅读