更改所有标记的拖动状态
Change dragging state for all markers
我正在使用 Leaflet.markercluster 1.0.1
我正在尝试在我的地图上添加按钮,以便用户可以输入 'edit mode'。单击该按钮时,它应该切换所有标记的拖动状态。我真的不知道如何正确地实现它,但我写了那个代码
var drag = false;
$('#button').on('click', function () {
drag = !drag;
markers.eachLayer(function (marker) {
marker.options.draggable = drag;
if (marker.dragging) {
drag ? marker.dragging.enable() : marker.dragging.disable();
}
});
});
它工作了一段时间,但后来我在 .enable()
上遇到异常
Uncaught TypeError: Cannot read property 'classList' of null
有人知道这样做的正确方法吗?
提前致谢!
MarkerClusterGroup
中 forEach
方法的逻辑似乎在拖动蜘蛛化标记后遍历地图上不可见的标记。然后启用拖动的逻辑失败,因为标记没有图标实例,因为它已从地图中删除。
我稍微清理了可重现的示例,并在 https://playground-leaflet.rhcloud.com/qate/1/edit?html,output - I strongly suggest that you turn this into a good bug report in the Leaflet.MarkerCluster 留下了一份副本。
你也可以检查每个标记是否有一个 marker._map
private 属性 来检查它们是否在地图上,并跳过那些不在地图上的标记,但这可能会导致其他问题在路上。
我正在使用 Leaflet.markercluster 1.0.1
我正在尝试在我的地图上添加按钮,以便用户可以输入 'edit mode'。单击该按钮时,它应该切换所有标记的拖动状态。我真的不知道如何正确地实现它,但我写了那个代码
var drag = false;
$('#button').on('click', function () {
drag = !drag;
markers.eachLayer(function (marker) {
marker.options.draggable = drag;
if (marker.dragging) {
drag ? marker.dragging.enable() : marker.dragging.disable();
}
});
});
它工作了一段时间,但后来我在 .enable()
上遇到异常Uncaught TypeError: Cannot read property 'classList' of null
有人知道这样做的正确方法吗?
提前致谢!
MarkerClusterGroup
中 forEach
方法的逻辑似乎在拖动蜘蛛化标记后遍历地图上不可见的标记。然后启用拖动的逻辑失败,因为标记没有图标实例,因为它已从地图中删除。
我稍微清理了可重现的示例,并在 https://playground-leaflet.rhcloud.com/qate/1/edit?html,output - I strongly suggest that you turn this into a good bug report in the Leaflet.MarkerCluster 留下了一份副本。
你也可以检查每个标记是否有一个 marker._map
private 属性 来检查它们是否在地图上,并跳过那些不在地图上的标记,但这可能会导致其他问题在路上。