在控制范围内检测图层启用/禁用

时间:2015-12-15 00:18:22

标签: javascript leaflet

要求:

我需要能够检测用户在Leaflet的地图控件中手动点击图层的时间。

问题:

我发现了“overlayadd”和“overlayremove”事件,并尝试将我的逻辑附加到这些事件,但它们似乎也在我在代码中的其他地方直接“addLayer”和“removeLayer”调用期间触发。这太笼统了。我只关心用户何时启动操作。

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

是否有任何事件潜伏更多特定于L.control操作或隐藏在overlayadd / overlayremove事件参数中的方式来检测触发操作的内容? ......或者只是其他一些方法来实现这个目标?

由于

1 个答案:

答案 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)
    }
});