簡體   English   中英

停止在傳單中傳播“點擊”事件

[英]Stop propagation of 'click' event in Leaflet

在我們的一個項目中,我們使用LeafletLeaflet.markercluster插件。 查看Leaflet的來源,我發現它將_collapse()函數附加到地圖的click事件,因此每當我點擊地圖時,它都會收縮先前擴展的集群。
現在,我想禁用此行為。 如果集群被擴展,那么我只想在click事件時取消選擇它的所有標記(並且不要收縮集群本身)。 這是我的一段代碼:

map.on('click', function(e) {
    scope.deselectAllMarkers();
});

我試圖在這個單行回調的末尾添加以下幾行,以停止click事件的傳播:

scope.L.DomEvent.stopPropagation(e);
scope.L.DomEvent.preventDefault(e);
scope.L.DomEvent.stop(e);
scope.L.DomEvent.stopPropagation(e.originalEvent);
scope.L.DomEvent.preventDefault(e.originalEvent);
scope.L.DomEvent.stop(e.originalEvent);

它們都不起作用。 每當我單擊地圖時,隱藏在Leaflet源中的默認偵聽器都會保持其調用。 我錯過了什么嗎?

我知道這個答案已經很晚了,但是如果有人對解決方案感興趣,這就是我解決的方法。

下面的這個片段是一個將函數綁定到click事件的例子。

map.on('click', doSomething);

實際上,在檢查了傳單的 API和一些極客調試之后,似乎事件返回了一個對象,而不是事件本身。 事件本身被包裝到返回對象中的一個字段中。

var doSomething = function(map) {
    // stop propagation
    map.originalEvent.preventDefault();
};

使用上面的代碼片段時,事件冒泡已經停止,這是我想要的,也可能是您想要的。

這個對我有用...

var div = L.DomUtil.get('div_id');
if (!L.Browser.touch) {
    L.DomEvent.disableClickPropagation(div);
    L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);
} else {
    L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);
}

感謝https://gis.stackexchange.com/questions/104507/disable-panning-dragging-on-leaflet-map-for-div-within-map

我知道這個答案很晚才出現,但就像在 jquery 中一樣,您可以使用.off

map.on('click', doSomething);
map.off('click');

它適用於任何傳單事件。

我將它用於僅觸發一次的'zoomend'事件。

map.on('moveend', function(e){
    console.log("any code");
    map.off('moveend');
});

最后,據我所知,我通過手動刪除調用_collapse()方法的默認click處理程序解決了這個問題。 臟,但它做到了。

您不能從事件處理程序覆蓋事件傳播。 頁面加載后,您需要使用內置的 Leaflet 助手,如下所示:

$('.element').each (i,el)->

  L.DomEvent.disableClickPropagation(el);

你有這樣的使用event.stopPropagation()

map.on('click', function(e) {  //don't forget to pass this 'e' event parameter
    e.preventDefault();
    scope.deselectAllMarkers();        
    e.stopPropagation();
    return false;     
});

試試這個

1. event.stopPropagation()
2. event.preventDefault()
3. return false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM