【百度地图API】如何给自定义覆盖物添加事件

http://www.cnblogs.com/milkmap/archive/2011/10/20/2219149.html

摘要:

  给marker、lable、circle等Overlay添加事件很简单,直接addEventListener即可。那么,自定义覆盖物的事件应该如何添加呢?我们一起来看一看~

-----------------------------------------------------------------------------------------

一、定义构造函数并继承Overlay

// 定义自定义覆盖物的构造函数  function SquareOverlay(center, length, color){   this._center = center;   this._length = length;   this._color = color;  }  // 继承API的BMap.Overlay  SquareOverlay.prototype = new BMap.Overlay(); 

二、初始化自定义覆盖物

// 实现初始化方法  SquareOverlay.prototype.initialize = function(map){  // 保存map对象实例   this._map = map;       // 创建div元素,作为自定义覆盖物的容器   var div = document.createElement("div");   div.style.position = "absolute";       // 可以根据参数设置元素外观   div.style.width = this._length + "px";   div.style.height = this._length + "px";   div.style.background = this._color;     // 将div添加到覆盖物容器中   map.getPanes().markerPane.appendChild(div);     // 保存div实例   this._div = div;     // 需要将div元素作为方法的返回值,当调用该覆盖物的show、   // hide方法,或者对覆盖物进行移除时,API都将操作此元素。   return div;  }

三、绘制覆盖物

// 实现绘制方法  SquareOverlay.prototype.draw = function(){  // 根据地理坐标转换为像素坐标,并设置给容器  var position = this._map.pointToOverlayPixel(this._center); this._div.style.left = position.x - this._length / 2 + "px";   this._div.style.top = position.y - this._length / 2 + "px";  }

四、添加覆盖物

//添加自定义覆盖物  var mySquare = new SquareOverlay(map.getCenter(), 100, "red");  map.addOverlay(mySquare);

五、给自定义覆盖物添加事件

1、显示事件

SquareOverlay.prototype.show = function(){   if (this._div){     this._div.style.display = "";   }  } 

添加完以上显示覆盖物事件后,只需要下面这句话,就可以显示覆盖物了。

mySquare.show();

2、隐藏覆盖物

// 实现隐藏方法  SquareOverlay.prototype.hide = function(){   if (this._div){     this._div.style.display = "none";   }  }

添加完以上code,只需使用这句话,即可隐藏覆盖物。

mySquare.hide();

3、改变覆盖物颜色

SquareOverlay.prototype.yellow = function(){   if (this._div){      this._div.style.background = "yellow";  }     }

上面这句话,是把覆盖物的背景颜色改成黄色,使用以下语句即可生效:

mySquare.yellow();

“第五部分、给覆盖物添加事件”小结:

我们在地图上添加了一个红色覆盖物,然后分别添加“显示、隐藏、改变颜色”的事件。示意图如下:

那么,我们需要在html里,先写出map的容器,和3个按钮。

<div style="width:520px;height:340px;border:1px solid gray" id="container"></div><p>    <input type="button" value="移除覆盖物" onclick="mySquare.hide();" />    <input type="button" value="显示覆盖物" onclick="mySquare.show();" />    <input type="button" value="变成黄色" onclick="mySquare.yellow();" /></p>

然后,在javascript中,添加这三个函数:

// 实现显示方法  SquareOverlay.prototype.show = function(){   if (this._div){     this._div.style.display = "";   }  }    // 实现隐藏方法  SquareOverlay.prototype.hide = function(){   if (this._div){     this._div.style.display = "none";   }  }

//改变颜色的方法SquareOverlay.prototype.yellow = function(){   if (this._div){      this._div.style.background = "yellow";  }     }

六、如何给自定义覆盖物添加点击事件(这章重要!很多人问的)

比如,我们给自定义覆盖物点击click事件。首先,需要添加一个addEventListener 的事件。如下:

SquareOverlay.prototype.addEventListener = function(event,fun){    this._div[‘on‘+event] = fun;}

再写该函数里面的参数,比如click。这样就跟百度地图API里面的覆盖物事件一样了。

mySquare.addEventListener(‘click‘,function(){    alert(‘click‘);});

同理,添加完毕addEventListener之后,还可以添加其他鼠标事件,比如mouseover。

mySquare.addEventListener(‘mousemover‘,function(){    alert(‘鼠标移上来了‘);});

七、全部源代码

自定义覆盖物

八、感谢大家支持!

API常见问题总结贴:http://tieba.baidu.com/p/1147019448

时间: 2024-08-08 18:17:14

【百度地图API】如何给自定义覆盖物添加事件的相关文章

百度地图api窗口信息自定义

百度地图加载完后,完全可以用dom方法操作,比较常用的就是点击mark的弹窗,利用jQuery可以很快的创建弹窗,需要注意的就是地图都是异步加载,所以绑定时间要用 jQuery 事件 - delegate() 方法 原文链接http://www.w3school.com.cn/jquery/event_delegate.asp #pop为弹窗容器,#info为弹窗信息 将#info设置成绝对定位信息窗就可以流动了 demo <!DOCTYPE html> <html> <he

数据视化Echarts+百度地图API实现市县区级下钻

开始 这两天公司有个页面需要做数据可视化的展示,数据视化采用的是Echarts+百度地图API做展示,需要用到县级区级下钻的一个联动效果发现网上关于Echarts做到县区级下钻的资料很少,有的话也不是很详细,对于刚接触Echarts的让人来说可能有些搞不明白,在这里我把Echarts下钻开发过程中总结的知识分享给大家,也能使自己加深印象,当然啦,对于一些在软件行业折腾了几年的老油条来说,这些都是一些非常基础的东西.但是还是希望能帮助到那些刚接触Echarts遇到类似问题需要帮助的人.如果哪里写的

百度地图API和高德地图API资料集锦

[高德地图API]从零开始学高德JS API(五)路线规划--驾车|公交|步行 [高德地图API]从零开始学高德JS API(四)搜索服务--POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 [高德地图API]从零开始学高德JS API(三)覆盖物--标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 [高德地图API]从零开始学高德JS API(二)地图控件与插件--测距.圆形编辑器.鼠标工具.地图类型切换.鹰眼鱼骨 [高德地图API]从零开始学高德JS API

百度地图API,根据经纬度实现车辆移动轨迹绘制

百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连线起来,形成连贯的轨迹线路 4.生成下一个图标后删除上一个绘制的图标,形成小车移动动画感 5.本例使用的是临近的随机坐标点 6.初学者,欢迎大家交流学习 7.查看实例 代码: [html] view plain copy <!DOCTYPE html> <html> <head&

百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和DOM编程里的事件模型一样,百度地图API也提供了类似的事件机制.本文介绍了事件监听的添加和移除方法,this指针和事件参数的使用以及绑定事件监听函数中涉及的闭包问题,最后分享了一个用来增强地图API事件机制的开源项目. 事件添加和移除 我们最简单的事件开始,下面的代码示例给map对象添加了click事件的监听

百度地图JS API移动端,phonegap 自定义覆盖物Click事件无法执行 的 bug 解决方法

当你为自定义覆盖物添加了click事件后,你会发现在移动端是无论如何也触发不了的,这算是一个BUG. 最近我在为我的地图APP开发第二版,在为一个覆盖物添加行为事被困扰到了,自定义覆盖物的click事件竟然无法在iPhone端触发,以及百度地图JS API里面的开源库涉及到自定义覆盖物click事件的均无效. 我为这个BUG烦恼了很久,直到今天,在QQ群里网友(在此要先感谢这位网友mooring)告诉了我解决方法:iPhone上的自定义覆盖物事件默认会触发map的click事件,如果map定义了

Android应用中使用百度地图API并添加标注(一)

网上一些资料这种的内容已经过时了,这里是最新的内容,如果哪里不对,请吐槽... 1)下载百度地图移动版API(Android)开发包 要在Android应用中使用百度地图API,就需要在工程中引用百度地图API开发包,这个开发包包含两个文件: 下载地址:http://pan.baidu.com/s/1i31enrB 2)申请API Key //包名 格式:例如:B7:6C:CF:E2:47:50:9B:3E:34:F7:08:72:F3:AC:F1:BE:55:D3:77:FB;com.maji

【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注

原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo,酒店logo等) 如何在标注上显示信息窗口,以及添加文字标签等其他覆盖物: 最后,介绍一个获取坐标的给力工具. ---------------------------------------------------------------------------------------------------

百度地图API之覆盖物和事件

前言 之前已经介绍了如何添加地图上一些控件,添加一些控件后就会实现一些常用的功能.具体请参考http://blog.csdn.net/u010989191/article/details/51326397.下面主要介绍如何添加覆盖物及给地图.地标等添加响应事件. 覆盖物相关API介绍 地图覆盖物概述 所有叠加或覆盖到地图的内容,我们统称为地图覆盖物.如标注.矢量图形元素(包括:折线和多边形和圆).信息窗口等.覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动. 地图API提供了如下