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)
希望这可以帮助!
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)