我有一张代码如下的地图:
map.on("click", addMarker);
function addMarker(evt) {
marker = new L.marker(...)
markerArray.push(marker)
doSomething()
if(markerArray.length >= 2){
alert()
}
}
然后我最近注意到,当我第一次点击使用笔记本电脑上的触摸板(在Ubuntu Firefox上,如果相关)创建标记时,警报就出现了。当我在条件之前添加断点时,问题没有发生。但是当我在条件中添加断点时,我注意到该数组包含两个相同的标记。我搜索了我的代码,似乎找不到另外一个原因,就是有多个map.on("click")
听众或两次调用push
markerArray
的标记,所以我认为只有解释是click
地图事件以“单击”两次调用addMarker
两次。
如何通过“一键点击”确保只调用addMarker
一次?
我应该做类似下面的伪代码吗?
map.on("click", onClick);
function onClick(evt){
if addMarker not running {
addMarker(evt)
}
//Else do nothing
}
function addMarker(evt) {
答案 0 :(得分:0)
来自this answer的轻微调整完成了这个伎俩
var lastClick = 0;
function addMarker() {
if (lastClick >= (Date.now() + 20))
return;
lastClick = Date.now();
//....
}
答案 1 :(得分:0)
“tap”布尔值在创建地图类时默认为 true。只需将其设置为 false,该事件就不会触发两次。
我遇到了同样的问题,当点击地图时,同时触发了两个事件。只需将“tap”设置为 false。
var map = L.map('map', {zoomControl: false, tap: false}).setView([0,0], 3)
//Set "tap" to false