Google Map API V3 - 当用户实际双击时,如何防止标记的鼠标单击事件

时间:2012-12-13 12:30:04

标签: google-maps google-maps-api-3

我在地图上有一个标记,我想绑定两个事件:

  1. 点击
  2. DBLCLICK
  3. 我想做以下事情:

    1. 当用户点击标记时,地图应放大并显示 更详细的地图。
    2. 我想将'dblclick'事件绑定到同一个标记,以便它可以 在相邻的“div”元素中加载一些第三方报告。
    3. 换句话说,我希望当用户点击或dblclicks时,它的行为会有所不同。但问题是,当我将这些事件绑定到标记并且用户“双击”标记时,“click”处理程序就会被触发,我不想让它发生。

      是否属实,当用户双击时,click事件也会被触发?如果是这样,当用户实际双击时,如何防止它触发“点击”事件? 有没有办法让我可以点击和双击标记的事件做不同的事情?

2 个答案:

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