检测层 Enable/Disable 在控制范围内

Detecting Layer Enable/Disable Within Control

要求:

我需要能够检测用户何时在 Leaflet 的地图控件中手动单击图层 on/off。

问题:

我找到了 "overlayadd" 和 "overlayremove" 事件,并试图将我的逻辑附加到这些事件上,但它们似乎也在直接 "addLayer" 和 [=32] 期间触发=] 调用我在代码的其他地方。这太笼统了。我只关心用户何时发起操作。

我可以将侦听器直接附加到控件复选框元素并深入 DOM 以找到相应的层名称,但这比我想要的更依赖于它们的 HTML 结构,因为他们可以随心所欲地改变它。

是否有更特定于 L.control 操作的事件或隐藏在 overlayadd/overlayremove 事件参数中的方法来检测是什么触发了操作? ...或者只是一些其他的方式来完成这个?

谢谢

L.Control.Layers clickhandler 触发时,它将自己的 "private" _handlingClick 属性 设置为 true:

var marker = new L.Marker([0, 0]);

var control = new L.Control.Layers(null, {
    'Marker': marker
}).addTo(map);

map.on('overlayadd overlayremove', function (e) {
    if (control._handlingClick) {
        // Executes only on input toggle, not on
        // map.addLayer(marker) or map.removeLayer(marker)
    }
});