单张popupclose事件在拖动标记时触发

时间:2014-10-09 10:39:40

标签: popup leaflet drag

在我的应用中,我将一个临时可拖动标记添加到地图并打开其弹出窗口。我发现当拖动标记时弹出窗口关闭。为了解决这个问题,我按照Force Leaflet popup to stay open when a draggable marker is moved

添加了代码
var marker = new L.Marker([setLat, setLng], {icon:questionIcon, draggable:true});
marker.bindPopup("popup content").addTo(map).openPopup();
marker.on('dragend', function(e) { 
    marker.openPopup();
});

但是,我还要确保如果用户手动关闭弹出窗口(使用标准' x'右上角),则会从地图中删除临时标记。所以我补充说......

marker.on('popupclose', function(e) {
    map.removeLayer(marker);
});

...但是,拖动标记时也会触发。因此,只要用户尝试通过拖动来重新定位标记,它就会完全消失。

有没有办法区分这两个事件,所以我可以区别对待它们?或者回到原始问题,在拖动标记时禁用弹出窗口?

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题, 为了解决这两个事件,我这样做来解决了这个问题:

marker._popup._closeButton.onclick = function( ){
    console.log("click closed "); 
    map.removeLayer(marker);
}

http://jsfiddle.net/Zoubir/v71Lhn5s/

答案 1 :(得分:2)

我遇到了类似的问题。这是我的解决方案

var IsDragging = false;

marker.on('dragstart', function (event) {
    IsDragging = true;
});

marker.on('dragend', function (event) {
    marker.openPopup();
    IsDragging = false;
});

map.on('popupclose', function(e) {
    setTimeout(function(){
        if(LS.Send.IsDragging == false){
            map.removeLayer(LS.Send.Marker);
        }
    },300);
});