博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【百度地图API】如何给自定义覆盖物添加事件
阅读量:6161 次
发布时间:2019-06-21

本文共 2900 字,大约阅读时间需要 9 分钟。

原文:

摘要:

  给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个按钮。

然后,在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('鼠标移上来了'); });

七、全部源代码

ContractedBlock.gif
ExpandedBlockStart.gif
自定义覆盖物
1   2   3   4 
5 自定义覆盖物的点击事件 6 7 8 9
10

11 12 13 14

15 16 17

八、感谢大家支持!

API常见问题总结贴: 

转载地址:http://qfafa.baihongyu.com/

你可能感兴趣的文章
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
centos 下安装g++
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>