Leaflet 传单JS:如何在第一次单击中创建新标记,然后在第二次单击中更新标记的板条

Leaflet 传单JS:如何在第一次单击中创建新标记,然后在第二次单击中更新标记的板条,leaflet,marker,angular-leaflet-directive,Leaflet,Marker,Angular Leaflet Directive,我有要在地图中渲染的标记列表,但我希望一个接一个地渲染。在第一次单击中,我要创建新标记。然后,当我单击到另一个位置时,我希望我的标记只移动到新的板条,而不是创建另一个标记。这是我的密码: 函数(licon、coord、data){ var self=jQuery(this); var map=自数据(“map”); var latlng=新的L.latlng(坐标[0],坐标[1]); //创建标记 if(licon){ var leafIcon=L.icon(licon); 控制台日志(类型(

我有要在地图中渲染的标记列表,但我希望一个接一个地渲染。在第一次单击中,我要创建新标记。然后,当我单击到另一个位置时,我希望我的标记只移动到新的板条,而不是创建另一个标记。这是我的密码:

函数(licon、coord、data){
var self=jQuery(this);
var map=自数据(“map”);
var latlng=新的L.latlng(坐标[0],坐标[1]);
//创建标记
if(licon){
var leafIcon=L.icon(licon);
控制台日志(类型(标记));
if(标记的类型)==‘未定义’){
var标记=L.标记(板条{
图标:叶图标,
“markerData”:数据,
德拉格布尔:是的
});
}否则{
console.log(“未定义”);
地图移除层(标记);
标记器=L.标记器(板条{
图标:叶图标,
“markerData”:数据,
德拉格布尔:是的
});
}
}否则{
var标记=L.标记(板条{
“markerData”:数据,
德拉格布尔:是的
});
}
marker.addTo(map);
返回标记;
}

一个简单的结果示例:

var-currentMarker;
映射上(“单击”),功能(事件){
如果(当前标记){
currentMarker.setLatLng(事件latlng);
返回;
}
currentMarker=L.marker(event.latlng{
德拉格布尔:是的
}).addTo(映射)。在(“单击”)上,函数(){
event.originalEvent.stopPropagation();
});
});
document.getElementById(“完成”).addEventListener(“单击”,函数)(){
currentMarker=null;
});
还可以添加平滑过渡以显示标记移动到新位置:

if(当前标记){
currentMarker._icon.style.transition=“变换0.3s缓解”;
currentMarker.\u shadow.style.transition=“变换0.3s缓解”;
currentMarker.setLatLng(事件latlng);
setTimeout(函数(){
currentMarker.\u icon.style.transition=null;
currentMarker.\u shadow.style.transition=null;
}, 300);
返回;
}

应该是
typeof(marker=='undefined')
而不是
typeof marker=='undefined'
?已经编辑了代码我想你在每个用户点击地图时调用了你的函数?在这种情况下,您的
var标记
可能不在该函数的范围内,这样您就可以在下一次调用时检索它,并检查它是否是
未定义的
。您可能还对删除标记并添加新标记感兴趣,而不是删除标记并添加新标记。