点击标记右键 - 谷歌地图V3

5
我一直在尝试让我的标记支持右键单击,但目前似乎该事件并没有被触发。目前的解决方法是检测地图上的右键单击事件,然后找到最近的标记并触发右键单击方法 - 显然这不是一个很好的解决方案。
根据文档,标记确实有右键单击事件,所以我不确定我做错了什么。https://developers.google.com/maps/documentation/javascript/reference#Marker
google.maps.event.addListener(marker, 'rightclick', handleRightClick)

无法正常工作,但是

google.maps.event.addListener(map, 'rightclick', handleRightClick)

正常工作。与此同时,以下也是如此:
google.maps.event.addListener(marker, 'click', handleRightClick)

我还使用了一个名为markerWithLabel的自定义标记插件 - http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.9/docs/reference.html - 当我发现它没有为右键单击添加事件侦听器时,我以为我已经解决了问题,但即使我自己添加了一个事件侦听器,仍然没有用。我在第257行添加了以下内容:

google.maps.event.addDomListener(this.eventDiv_, "rightclick", function(e) {
    if (me.marker_.getClickable()) {
        google.maps.event.trigger(me.marker_, "rightclick", e);
        cAbortEvent(e);
    }
})

有人遇到过类似的问题或者找到了更好的解决方法吗?
提前感谢。

1
你的 handleRightClick 函数是用来干什么的? - geocodezip
目前呢?它只是显示一个警告。只是想证明它正在工作。 - SeanCAtkinson
3个回答

4
假设您有一个名为globalmap的地图对象(创建为新的google.maps.Map):
这将在地图中心添加一个标记:
var newmarker=new google.maps.Marker({map:globalmap, position: globalmap.getCenter()});

这将监听标记的右键点击事件;

google.maps.event.addListener(newmarker,  'rightclick',  function(mouseEvent) { alert('Right click triggered'); });

编辑:关于MarkerWithLabel插件,我可以看到它是从google.maps.OverlayView扩展而来,并在对象的marker_属性中传递了一个标记。这意味着你仍然可以按照示例中的方式进行操作(复制):

 var marker1 = new MarkerWithLabel({
   position: homeLatLng,
   draggable: true,
   raiseOnDrag: true,
   map: map,
   labelContent: "$425K",
   labelAnchor: new google.maps.Point(22, 0),
   labelClass: "labels", // the CSS class for the label
   labelStyle: {opacity: 0.75}
 });

然后将正确的单击行为添加为

google.maps.event.addListener(marker1.marker_,  'rightclick',  function(mouseEvent) { alert('Right click triggered'); });

1
尝试按照您的建议简化代码。在标准标记上单击右键。我使用的markerWithLabel插件可能存在问题。 - SeanCAtkinson

2

你上一次的尝试:

google.maps.event.addDomListener(this.eventDiv_, "rightclick",function(){/**/});

这个方法行不通,因为没有rightclick-DOMMouseEvent事件。

你需要观察eventDiv_click-事件,并检查事件的button属性是否设置为2(当检测到右键单击时)。


不幸的是,当我右键单击时,点击事件不会被触发。谷歌地图会夺取它们... - SeanCAtkinson
2
使用 mouseup 代替 click - Dr.Molle

1

对我来说,右键单击事件在google.maps.Marker上有效:

  google.maps.event.addListener(marker, 'rightclick', function() {
    infowindow.setContent("<div style='width:100px'>rightclick</div>");
    infowindow.open(map,marker);
  });

工作示例


1
是的,但是当我右键单击标签本身时不行。 - Fernando Fabreti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接