Google Maps实现右键菜单
最近在做公司项目( www.youmonitor.us 它可以帮助你检测你的网站的稳定性,如果你的网站当了,它会给你发警报,而且是免费的,有兴趣的朋友可以去看看,不是广告,希望版主不要删我的帖子 )的第二版,需要用到Google Maps的右键菜单(类似google maps官方网站的右键菜单功能 http://maps.google.com/ ),但是好像google的官方API上面没有这种示例,于是求助google的搜索引擎,找到了这篇文章: http://www.econym.demon.co.uk/googlemaps/context.htm ,发现google maps自己有一个鼠标右键事件:singlerightclick,文章我就不翻译了,英文不好的朋友可以直接看它的代码: http://www.econym.demon.co.uk/googlemaps/examples/context.htm 。但是这篇文章还有一个美中不足,就是我希望在用户点击了marker以后弹出的右键菜单和在别的地方弹出的不一样。类似这样的效果:
marker上的比其它的多了Clear Search Results这一项,起初我想要使用事件传进来的参数marker("singlerightclick"的第三个参数是overlay?http://www.google.com/apis/maps/documentation/reference.html)来判断:
- GEvent.addListener(map, "singlerightclick" ,function(pixel,tile, marker) {
- // store the "pixel" info in case we need it later
- // adjust the context menu location if near an egde
- // create a GControlPosition
- // apply it to the context menu, and make the context menu visible
- clickedPixel = pixel;
- var x=pixel.x;
- var y=pixel.y;
- if (x > map.getSize().width - 120 ) { x = map.getSize().width - 120 }
- if (y > map.getSize().height - 100 ) { y = map.getSize().height - 100 }
- var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(x,y));
- pos.apply(contextmenu);
- if (marker){
- contextmenu.style.visibility = "visible" ;
- }
- });
但是好像行不通,不管在不在marker上点击鼠标右键if(marker)永远成立,这可把我难住了,怎么办呢?经过一番的探索我发现这个事件的第二个参数"src"里面有一个property叫做:__marker__,是不是这就是我要找的?于是我就把代码改成这个样子:
- if (GBrowserIsCompatible()) {
- // === Global variable that can be used by the context handling functions ==
- var clickedPixel;
- var map = new GMap2(document.getElementById( "map" ));
- map.addControl( new GLargeMapControl());
- map.addControl( new GMapTypeControl());
- map.setCenter( new GLatLng( 43 ,- 79 ), 8 );
- var marker = new GMarker( new GLatLng( 43 ,- 79 ),{title: "center" });
- map.addOverlay(marker);
- ...
- // === listen for singlerightclick ===
- GEvent.addListener(map, "singlerightclick" ,function(pixel,tile, marker) {
- // store the "pixel" info in case we need it later
- // adjust the context menu location if near an egde
- // create a GControlPosition
- // apply it to the context menu, and make the context menu visible
- clickedPixel = pixel;
- var x=pixel.x;
- var y=pixel.y;
- if (x > map.getSize().width - 120 ) { x = map.getSize().width - 120 }
- if (y > map.getSize().height - 100 ) { y = map.getSize().height - 100 }
- var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(x,y));
- pos.apply(contextmenu);
- if (tile.__marker__){alert(tile.__marker__)
- contextmenu.style.visibility = "visible" ;
- } else {
- contextmenu.style.visibility = "hidden" ;
- }
- });
搞定,It works! 原来google还留了一手的,呵呵。