如何通过单击触摸板来阻止map.on(“click”)触发两次?

时间:2016-05-06 21:28:48

标签: javascript leaflet

我有一张代码如下的地图:

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) {

2 个答案:

答案 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