处理Google Maps JS API v3中的点击事件,同时忽略双击

Pie*_*rre 46 javascript events google-maps google-maps-api-3

使用Google Maps JS API v3,我想删除用户点击地图的标记,同时保留用户双击时的默认行为(并且不在地图上添加任何标记).

我考虑过定义点击事件的超时.如果在接下来的几毫秒内触发双击事件,则会取消超时.如果不是,则在超时到期时将标记放置在地图上.但它看起来并不是最好的解决方案.

有更优雅的方式来处理这个问题吗?

谢谢.

小智 63

我刚刚发现了一个可行的hackish解决方案,但引入了一个小的等待时间(200ms,这是使其工作的最小值,但我不知道它是否依赖于客户端)

var update_timeout = null;

google.maps.event.addListener(map, 'click', function(event){
    update_timeout = setTimeout(function(){
        do_something_here();
    }, 200);        
});

google.maps.event.addListener(map, 'dblclick', function(event) {       
    clearTimeout(update_timeout);
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 很好,谢谢!这似乎是这里提供的最简单的解决方案. (2认同)

reb*_*mer 27

解决它的最简单方法.

var location;
var map = ...

google.maps.event.addListener(map, 'click', function(event) {
    mapZoom = map.getZoom();
    startLocation = event.latLng;
    setTimeout(placeMarker, 600);
});

function placeMarker() {
    if(mapZoom == map.getZoom()){
        new google.maps.Marker({position: location, map: map});
    }
}
Run Code Online (Sandbox Code Playgroud)

shogunpanda的解决方案更好(见下文)


小智 7

你可以利用dblclick如果是双击就会触发,只需点击一次这样的触发即可点击.

runIfNotDblClick = function(fun){
    if(singleClick){
        whateverurfunctionis();
    }
};

clearSingleClick = function(fun){
    singleClick = false;
};

singleClick = false;

google.maps.event.addListener(map, 'click', function(event) {// duh! :-( google map zoom on double click!
    singleClick = true;
    setTimeout("runIfNotDblClick()", 500);
});

google.maps.event.addListener(map, 'dblclick', function(event) {// duh! :-( google map zoom on double click!
     clearSingleClick();
});
Run Code Online (Sandbox Code Playgroud)

http://www.ilikeplaces.com