17

在我们的一个项目中,我们LeafletLeaflet.markercluster插件一起使用。查看Leaflet's 的源代码,我发现它会将_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每当我单击地图时,隐藏在源中的默认侦听器都会保持其调用。我错过了什么吗?

4

6 回答 6

28

我知道这个答案已经很晚了,但是如果有人对解决方案感兴趣,这就是我解决它的方法。

下面的这个片段是将函数绑定到click事件的示例。

map.on('click', doSomething);

实际上,在检查了传单的 API和一些极客调试之后,似乎事件返回了一个对象,而不是事件本身。事件本身被包装到返回对象中的一个字段中。

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

使用上面的代码片段时,事件冒泡已经停止,这是我想要的,也可能是你想要的。

于 2014-03-17T10:23:50.787 回答
2

这个对我有用...

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

于 2017-01-09T06:51:37.120 回答
1

我知道这个答案比较晚,但就像在 jquery 中一样,你可以使用.off

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

它适用于任何传单活动。

我将它用于'zoomend'仅触发一次的事件。

map.on('moveend', function(e){
    console.log("any code");
    map.off('moveend');
});
于 2020-06-02T00:56:59.053 回答
0

您不能覆盖来自事件处理程序的事件传播。页面加载后,您需要使用内置的 Leaflet 助手,如下所示:

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

  L.DomEvent.disableClickPropagation(el);
于 2015-02-12T18:33:39.270 回答
-1

最后,据我所知,我通过手动删除click调用该方法的默认处理程序解决了这个问题。_collapse()肮脏,但它成功了。

于 2014-04-08T09:09:56.743 回答
-3

你有这样的用途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

于 2013-09-04T08:12:09.607 回答