我通过扩展L.Handler并在addHooks方法中为map click事件添加处理程序来创建自定义处理程序。从外部代码,我也为click事件添加处理程序。我在自定义处理程序中使用L.DomEvent.stop(e),但事件传播和外部代码处理它。这似乎是一个错误。
const map = L.map("map", {
boxZoom: false
}).setView([39.50, -98.35], 5);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
L.CustomHandler = L.Handler.extend({
initialize: function(map) {
this._map = map;
},
addHooks: function() {
this._map
.on('click', this._onMapClick, this)
},
_onMapClick: function(e) {
L.DomEvent.stop(e.originalEvent);
console.log('map click from handler');
},
removeHooks: function() {
this._map
.off('click', this._onMapClick, this);
},
});
map.addHandler('customHandler', L.CustomHandler);
map.customHandler.enable();
map.on('click', (e) => console.log('map click'));

请参阅我的plunker pls https://plnkr.co/edit/yuh67rrsOZYSpUjXam4g?p=preview