我在地图上有一个标记,我想绑定两个事件:
我想做以下事情:
换句话说,我希望当用户点击或dblclicks时,它的行为会有所不同。但问题是,当我将这些事件绑定到标记并且用户“双击”标记时,“click”处理程序就会被触发,我不想让它发生。
是否属实,当用户双击时,click事件也会被触发?如果是这样,当用户实际双击时,如何防止它触发“点击”事件? 有没有办法让我可以点击和双击标记的事件做不同的事情?
答案 0 :(得分:4)
这是api的一个已知细微差别,您需要安装点击计数器超时,如下所示:
function createMap2() {
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map2"), myOptions);
var doubleClicked=false;
var clickEvent;
google.maps.event.addListener(map, 'dblclick', function(event) {
doubleClicked=true;
});
function handleClick() {
if (!doubleClicked) {
infoWindow.setPosition(clickEvent.latLng);
infoWindow.setContent(createInfo(clickEvent));
infoWindow.open(map);
}
}
google.maps.event.addListener(map, 'click', function(event) {
clickEvent = event;
doubleClicked = false;
window.setTimeout(handleClick, 250);
});
}
以上从http://www.william-map.com/20100506/1/v3click.htm
中提取的代码查看以下链接以获取更多信息:
https://groups.google.com/forum/?fromgroups=#!topic/google-maps-js-api-v3/YRAvYHngeNk https://groups.google.com/forum/?fromgroups=#!topic/google-maps-js-api-v3/2MomDiLMEiw
答案 1 :(得分:0)
您可以使用预处理函数将单击与双击分开。在这种情况下,第二次点击必须在第一次点击的500毫秒内:
//Global vars
var G = google.maps;
var clickTimeOut = null;
G.event.addListener(marker,'click',mClick);
function mClick(mev) {
if (clickTimeOut) {
window.clearTimeout(clickTimeOut);
clickTimeOut = null;
doubleClick(mev);
}
else {
clickTimeOut = window.setTimeout(function(){singleClick(mev)},500);
}
}
function doubleClick(mev) {
// handle double click here
}
function singleClick(mev) {
window.clearTimeout(clckTimeOut);
clickTimeOut = null;
// handle single click here
}
mev是事件处理程序作为参数接收的mouseEvent object。