Leaflet geojson更新可拖动状态或标记

我想知道是否有可能更新传单中GEOJSON层内标记的可拖动事件,我知道我可以通过添加:

layer.options.draggable = True 

在onEachFeature函数中,我想要实现的是,更新元素单击时的可拖动选项,如:

 $(document).on('click','#someButton',function(){ layer.options.draggable = True; //Only one specific marker }); 

通过这种方式,我希望禁用可拖动选项的所有标记,然后单击按钮,启用可拖动选项,仅适用于一个特定标记。 是否有可能使用geojson层实现这一目标? 我在featureGroup中也有这个geojson层,希望你们能帮助我。 谢谢

您可以通过简单地从地图中删除它,设置(重置)其draggable选项,然后将其重新添加到地图来动态启用/禁用传单标记的draggable

 var map = L.map('map').setView([48.86, 2.35], 11); var marker = L.marker([48.86, 2.35]).addTo(map); document.getElementById('dragonoff').addEventListener('click', function(event) { event.preventDefault(); // Toggle Marker draggability. marker.remove(); marker.options.draggable = !marker.options.draggable; marker.addTo(map); alert(marker.options.draggable ? 'Marker is now draggable' : 'Marker is no longer draggable'); }); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); 
   

每个L.Marker都有一个dragging属性,它是标记的拖动处理程序 – 而Leaflet处理程序可以是enable() d和disable() d。

关于L.Marker dragging属性的Leaflet文档也明确指出:

交互处理程序是标记实例的属性,允许您在运行时控制交互行为,启用或禁用某些function,如拖动(请参阅Handler方法)。 例:

 marker.dragging.disable(); 

在您的具体情况下,这将意味着:

 $(document).on('click','#someButton',function(){ layer.dragging.enable(); }); 

请注意,这仅适用于L.Marker s – 如果您使用的是GeoJSON,请不要期望这可以在线条或多边形上工作,或者在您明确决定显示为L.Circle s或L.CircleMarker的点上(通过pointToLayer选项)