检测层 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)
}
});
要求:
我需要能够检测用户何时在 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)
}
});