要求:
我需要能够检测用户在Leaflet的地图控件中手动点击图层的时间。
问题:
我发现了“overlayadd”和“overlayremove”事件,并尝试将我的逻辑附加到这些事件,但它们似乎也在我在代码中的其他地方直接“addLayer”和“removeLayer”调用期间触发。这太笼统了。我只关心用户何时启动操作。
我可以将侦听器直接附加到控件复选框元素并深入到DOM中以查找相应的图层名称,但这依赖于他们的HTML结构比我想要的更多,因为他们可以随心所欲地改变它。
是否有任何事件潜伏更多特定于L.control操作或隐藏在overlayadd / overlayremove事件参数中的方式来检测触发操作的内容? ......或者只是其他一些方法来实现这个目标?
由于
答案 0 :(得分:2)
当L.Control.Layers
点击处理程序触发时,它将自己的“私有”_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)
}
});