`
faxMonkey
  • 浏览: 29821 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

google Map api V3 右键添加菜单问题

 
阅读更多
最近研究google Map api V3 被右键添加菜单困扰
1、目前网络上的大多数是基于V2版本的开发文档
2、添加的菜单样式不与主题样式有出入需要兼容主题框架样式

经过试验V3版本 兼容jQuery easyUI 的菜单简单DEMO如下
	var map;
	function initialize() {
		var myOptions = {
			zoom : 8,
			center : new google.maps.LatLng(-34.397, 150.644),
			mapTypeId : google.maps.MapTypeId.ROADMAP
		};
		map = new google.maps.Map(document.getElementById('map_canvas'),
				myOptions);
		var mapOverlay =   new google.maps.OverlayView();
        mapOverlay.setMap(map);
		google.maps.event.addListener(map, 'rightclick', function(event) {
			var currentLatLng = event.latLng;
			var p = mapOverlay.getProjection().fromLatLngToContainerPixel(
					event.latLng);
				var x = p.x;
				var y = p.y;
				showMenu(x, y);
			});
	}

	google.maps.event.addDomListener(window, 'load', initialize);

    function showMenu(x,y){
    	   $('#mm').menu('show', {
	              left: x,
	              top: y
	          });
    }


原理就是OverlayView对象获取X,Y的像素值
然后采用jQuery easyUI 渲染菜单

若是有自己定制菜单的愿望可以在获取X,Y后自行扩展

全局代码如下 jQuery easyUI 样式和js文件请自行导入
<!DOCTYPE html>
<html>
    <head>
        <title>Google Maps JavaScript API v3 Example: Map Simple</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
        <meta charset="UTF-8">
        <style type="text/css">
        html,body,#map_canvas {
        	margin: 0;
        	padding: 0;
        	height: 100%;
        }
        </style>


    <link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="easyui/demo.css">
    <script type="text/javascript" language="javascript" src="easyui/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" language="javascript" src="easyui/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
	var map;
	function initialize() {
		var myOptions = {
			zoom : 8,
			center : new google.maps.LatLng(-34.397, 150.644),
			mapTypeId : google.maps.MapTypeId.ROADMAP
		};
		map = new google.maps.Map(document.getElementById('map_canvas'),
				myOptions);
		var mapOverlay =   new google.maps.OverlayView();
        mapOverlay.setMap(map);
		google.maps.event.addListener(map, 'rightclick', function(event) {
			var currentLatLng = event.latLng;
			var p = mapOverlay.getProjection().fromLatLngToContainerPixel(
					event.latLng);
				var x = p.x;
				var y = p.y;
				showMenu(x, y);
			});
	}

	google.maps.event.addDomListener(window, 'load', initialize);

    function showMenu(x,y){
    	   $('#mm').menu('show', {
	              left: x,
	              top: y
	          });
    }
</script>
    </head>
    <body>
        <div id="map_canvas"></div>
        <div id="mm" class="easyui-menu" style="width: 120px;">
            <div onclick=javascript:alert('new');>
                New
            </div>
            <div>
                <span>Open</span>
                <div style="width: 150px;">
                    <div>
                        <b>Word</b>
                    </div>
                    <div>
                        Excel
                    </div>
                    <div>
                        PowerPoint
                    </div>
                    <div>
                        <span>M1</span>
                        <div style="width: 120px;">
                            <div>
                                sub1
                            </div>
                            <div>
                                sub2
                            </div>
                            <div>
                                <span>Sub</span>
                                <div style="width: 80px;">
                                    <div onclick=javascript:alert('sub21');
>
                                        sub21
                                    </div>
                                    <div>
                                        sub22
                                    </div>
                                    <div>
                                        sub23
                                    </div>
                                </div>
                            </div>
                            <div>
                                sub3
                            </div>
                        </div>
                    </div>
                    <div>
                        <span>Window Demos</span>
                        <div style="width: 120px;">
                            <div href="window.html">
                                Window
                            </div>
                            <div href="dialog.html">
                                Dialog
                            </div>
                            <div>
                                [url=http://www.jeasyui.com]EasyUI[/url]
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div iconCls="icon-save">
                Save
            </div>
            <div class="menu-sep"></div>
            <div>
                Exit
            </div>
        </div>
    </body>
</html>

2
0
分享到:
评论
2 楼 wujch 2012-05-04  
我错了,var p = mapOverlay.getProjection().fromLatLngToContainerPixel( 
event.latLng); 
改成
var p = map.getProjection().fromLatLngToContainerPixel(event.latLng);
右键弹不出来了。。。
1 楼 wujch 2012-05-04  
你这有BUG

这两句在3.8版本里会使地图放大后无法拖动。
var mapOverlay =   new google.maps.OverlayView(); 
mapOverlay.setMap(map); 


var p = mapOverlay.getProjection().fromLatLngToContainerPixel( 
event.latLng); 
这句可改成
var p = map.getProjection().fromLatLngToContainerPixel(event.latLng); 

相关推荐

    谷歌地图api右键菜单

    在谷歌地图API中,右键菜单通常是通过添加事件监听器到地图实例上实现的。当用户在地图上右击时,这个监听器会被触发,然后执行相应的代码,展示一个自定义的菜单。这个菜单可以包含各种选项,比如添加标记、获取...

    谷歌地图Google Map API V3中文开发文档

    谷歌地图 Google Map API V3 中文开发文档 谷歌地图 Google Map API V3 中文开发文档是 Google 公司提供的一种基于 Web 的地图应用程序接口,允许开发者在自己的网站或应用程序中嵌入谷歌地图,以提供地图检索、...

    google map api v3源码

    由于这个压缩包名为"WebMap",里面可能包含了一个简单的web应用,展示如何使用谷歌地图API V3来创建一个网页地图。开发者可以通过分析和学习这个源码,了解上述知识点的实际应用,并进一步扩展自己的地图应用开发...

    谷歌地图添加右键菜单

    // 添加菜单项 var menuItem = document.createElement('div'); menuItem.textContent = '菜单项1'; menuItem.addEventListener('click', function() { // 执行操作1 }); contextMenu.appendChild(menuItem); // ...

    Google Map api V3 (3.9.12)的离线开发包

    Google Map API V3(3.9.12)是谷歌提供的一个用于在网页上嵌入交互式地图的服务,它是Google Maps JavaScript API的第三个主要版本。这个离线开发包允许开发者在没有网络连接的情况下进行地图应用的开发和测试,这...

    谷歌地图API-google map api v3

    ### 谷歌地图API V3 - 详细知识点解析 #### 概述 谷歌地图API V3(Google Maps API V3)是谷歌提供的一套强大的工具和服务集合,旨在帮助开发者在网页上集成交互式地图。它支持多种功能,如自定义地图样式、添加...

    经典教程:JavaScript调用Google Map API V3

    - **自定义控件和按钮**:Google Maps API V3允许在地图上添加自定义控件,如按钮、滑块或下拉菜单,以增强用户界面。这些控件可以响应用户的操作,如更改地图视图或执行特定功能。 3. **成果** - 通过学习和实践...

    百度地图给map添加右键菜单(判断是否为marker)

    这通过`BMap.ContextMenu`类实现,它用于创建上下文菜单,并通过`addItem`方法添加菜单项。 2. **创建和显示右键菜单** 示例中展示了如何创建一个新的右键菜单项,如“新建站点”。通过`BMap.MenuItem`构造函数,...

    google map api v3 ExtDraggableObject

    谷歌地图API V3是Google为开发者提供的一种强大的工具,用于在网页上集成和操作地图。在API中,`ExtDraggableObject`是一个自定义扩展类,它允许用户将地图上的对象(如标记、覆盖物等)进行拖放操作,极大地增强了...

    为对话框应用程序添加右键菜单

    对话框通常不支持系统默认的右键菜单,但为了增强用户体验,我们可以通过编程实现为对话框添加自定义的右键菜单。本文将详细讲解如何为对话框应用程序添加右键菜单。 首先,我们需要了解Windows消息处理机制。在...

    谷歌MAP_V3中文详解以及一个简单例子

    谷歌地图API V3提供了丰富的功能,如添加标记(Markers)、信息窗口(InfoWindows)和路径(Polylines)。比如,我们可以这样添加一个标记: ```javascript var marker = new google.maps.Marker({ position: ...

    google Map api v3学习例子

    通过这个"google Map api v3学习例子",你可以逐步掌握如何利用Google Maps API V3构建交互式地图应用,包括添加标记、处理事件、展示叠加层等功能。实践中不断探索,你会发现Google Maps API V3的强大和灵活性,能...

    Google Maps API V3 中文参考文档(JavaScript)

    在 Google Maps API V3 中,Map 是地图的核心组件,提供了多种配置选项和事件监听器。开发者可以使用 MapOptions 对象来配置地图的基本属性,如中心点、缩放级别、地图类型等。同时,MapTypeId 对象提供了多种地图...

    Openlayers扩展右键菜单

    "OpenLayers扩展右键菜单"是一个项目,旨在帮助开发者为他们的OpenLayers地图应用添加自定义的右键上下文菜单。这个扩展允许用户在地图上点击右键时触发特定的操作,例如测量距离、添加图层、获取地图坐标等。 开发...

    高德地图实现绘制覆盖物,自定义右键菜单

    本项目聚焦于利用高德地图js-api实现绘制覆盖物,以及自定义右键菜单的功能。 首先,我们来探讨“绘制覆盖物”这一概念。在高德地图API中,覆盖物是指可以在地图上绘制的各种图形,如点、线、面等。在这个项目中,...

    Google Map API 使用示例

    此外,Google Map API 还支持添加自定义标记(markers)、信息窗口(infowindows)、覆盖物(overlays)等元素,以增强地图的交互性和信息展示。例如,你可以创建一个带有自定义图标和信息窗口的标记: ```...

    ASP.NET 鼠标右键菜单 右键菜单 ASP.NET鼠标右键菜单 C#右键菜单

    这通常涉及到一个Web服务(WebMethod)或API接口,它根据用户的上下文信息返回相应的菜单项。 在C#中,你可以创建一个Web服务方法: ```csharp [WebMethod] public static string GetContextMenuItems(string ...

    listctrl右键悬浮菜单

    本主题将深入探讨如何在ListCtrl控件上实现右键悬浮菜单,并处理如删除、添加等用户操作。 首先,为了实现在ListCtrl上的右键悬浮菜单,我们需要遵循以下步骤: 1. **创建资源菜单**:在你的MFC工程中,打开资源...

    Google Map Api

    最新版的Google Map API是V3,它是一个基于JavaScript的API,具有高度可定制性和灵活性。 在Google Map API V3中,开发者可以实现以下主要功能: 1. **地图嵌入**:通过简单的HTML和JavaScript代码,可以在网页上...

Global site tag (gtag.js) - Google Analytics