MapPanes 对象规范
该对象中包含了所有API叠加层的Dom元素,用来在区分不同的层级放置不同的覆盖物。下面列出了这些元素,对应zIndex顺序,底部为“容器 0”,顶部为“容器 6”。
属性
名称 | 类型 | 说明 |
---|---|---|
mapPane
|
HTMLDivElement
|
(容器 0)此容器是最下面的容器,在所有覆盖物层的底下,底图的上面。 |
overlayLayer
|
HTMLDivElement
|
(容器 1)此容器中包含Polyline、Polygon、GroundOverlay等。 |
overlayShadow
|
HTMLDivElement
|
(容器 2)此容器包含Marker阴影层。 |
overlayImage
|
HTMLDivElement
|
(容器 3)此容器包含Marker图片层。 |
floatShadow
|
HTMLDivElement
|
(容器 4)此容器包含InfoWindow的阴影,位于overlayImage之上。 |
overlayMouseTarget
|
HTMLDivElement
|
(容器 5)此容器包含透明的鼠标相应元素,用于接收Marker的鼠标事件。该窗格在floatShadow之上,这样便可点击信息窗口阴影中的Marker。 |
floatPane
|
HTMLDivElement
|
(容器 6)此窗格包含InfoWindow。它位于所有地图叠加层之上。 |
实例
本示例中,介绍创建简单的自定义覆盖物并设置覆盖物层级
function init() { var center = new qq.maps.LatLng(39.982163, 116.306070); var map = new qq.maps.Map(document.getElementById("container"), { center: center, zoom: 14 }); var Label = function(opts) { qq.maps.Overlay.call(this, opts); } //继承Overlay基类 Label.prototype = new qq.maps.Overlay(); //定义construct,实现这个接口来初始化自定义的Dom元素 Label.prototype.construct = function() { this.dom = document.createElement('div'); this.dom.style.cssText = 'background:#0f0;color:white;position:absolute;' + 'text-align:center;width:100px;height:30px'; this.dom.innerHTML = 'Hello world'; //将dom添加到覆盖物层,overlayLayer的顺序为容器 1,此容器中包含Polyline、Polygon、GroundOverlay等 //this.getPanes().overlayLayer.appendChild(this.dom); //将dom添加到覆盖物层,overlayMouseTarget的顺序容器 5,此容器包含透明的鼠标相应元素,用于接收Marker的鼠标事件 this.getPanes().overlayMouseTarget.appendChild(this.dom); //设置自定义覆盖物点击事件 this.dom.onclick = function() { alert("Hello world"); } } //绘制和更新自定义的dom元素 Label.prototype.draw = function() { //获取地理经纬度坐标 var position = this.get('position'); if (position) { var pixel = this.getProjection().fromLatLngToDivPixel(position); this.dom.style.left = pixel.getX() + 'px'; this.dom.style.top = pixel.getY() + 'px'; } } Label.prototype.destroy = function() { //移除dom this.dom.parentNode.removeChild(this.dom); } var label = new Label({ map: map, position: center }); }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>自定义Overlay,</title> <style type="text/css"> * { margin: 0px; padding: 0px; } body, button, input, select, textarea { font: 12px/16px Verdana, Helvetica, Arial, sans-serif; } #info { width: 603px; padding-top: 3px; overflow: hidden; } .btn { width: 190px; } </style> <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script> </head> <body onload="init()"> <script> function init() { var center = new qq.maps.LatLng(39.982163, 116.306070); var map = new qq.maps.Map(document.getElementById("container"), { center: center, zoom: 14 }); var Label = function(opts) { qq.maps.Overlay.call(this, opts); } //继承Overlay基类 Label.prototype = new qq.maps.Overlay(); //定义construct,实现这个接口来初始化自定义的Dom元素 Label.prototype.construct = function() { this.dom = document.createElement('div'); this.dom.style.cssText = 'background:#0f0;color:white;position:absolute;' + 'text-align:center;width:100px;height:30px'; this.dom.innerHTML = 'Hello world'; //将dom添加到覆盖物层,overlayLayer的顺序为容器 1,此容器中包含Polyline、Polygon、GroundOverlay等 //this.getPanes().overlayLayer.appendChild(this.dom); //将dom添加到覆盖物层,overlayMouseTarget的顺序容器 5,此容器包含透明的鼠标相应元素,用于接收Marker的鼠标事件 this.getPanes().overlayMouseTarget.appendChild(this.dom); //设置自定义覆盖物点击事件 this.dom.onclick = function() { alert("Hello world"); } } //绘制和更新自定义的dom元素 Label.prototype.draw = function() { //获取地理经纬度坐标 var position = this.get('position'); if (position) { var pixel = this.getProjection().fromLatLngToDivPixel(position); this.dom.style.left = pixel.getX() + 'px'; this.dom.style.top = pixel.getY() + 'px'; } } Label.prototype.destroy = function() { //移除dom this.dom.parentNode.removeChild(this.dom); } var label = new Label({ map: map, position: center }); } </script> <div style="width:603px;height:300px" id="container"></div> <div id="info">通过继承Overlay实现一个自定义的文本标记,设置自定义覆盖物容器的顺序。</div> </body> </html>