百度地图JavaScript API自定义覆盖物、自定义信息窗口增删时的显示问题
项目中,需求:在百度地图上实时画出车辆,并能点击车辆弹出信息框查看实时信息。
实现:通过不停的画覆盖物并删除掉。点击覆盖物时弹出信息窗口。
问题:删除掉覆盖物后信息窗也删除掉了。因为信息窗是建立在覆盖物的基础上的。
如何做到,我点击覆盖物弹出信息框,信息框能够持续显示实时信息,直到点击关闭?
做下笔记,包括了自定义覆盖物标识、自定义信息窗口、信息窗口显示实时信息、清除覆盖物时信息窗口的显示问题等等。
贴张效果图:

代码:(频繁的添加和删除覆盖物,可能会有闪烁的问题,建议更新时单个删除不要的,不要一次性删除所有覆盖物)
<script type="text/javascript">
var chooseDivId=new Array();//保存信息窗口中显示的divId
function setTab(divId,divName,zDivCount){
chooseDivId.push(divId);
for (i=0;i<=zDivCount;i++) {
//将所有的层都隐藏
document.getElementById(divName+i).style.display="none";
document.getElementById("one"+i).style.backgroundColor="#E0E2EB";
}
//显示当前层
document.getElementById(divName+divId).style.display="block";
document.getElementById("one"+divId).style.backgroundColor="#FFFFFF";
} // 百度地图API功能
var baiduMap = new BMap.Map("allmap",{mapType:BMAP_SATELLITE_MAP});
//var point = new BMap.Point(121.38750613, 31.1743319);//shanghai
//var point = new BMap.Point(116.404, 39.915);//beijing
var lon=${serverLon.value};
var lat=${serverLat.value};
if(lon==null||lat==null){
//默认中心坐标在北京
var point = new BMap.Point(116.404, 39.915);//beijing
}else{
var point = new BMap.Point(lon, lat);
}
baiduMap.centerAndZoom(point, 15);
//画小车
var myIcon = new BMap.Icon("../../../../IGS/image_driverExam/images/car.png", new BMap.Size(41,90)); //保存点击了的需要弹出信息窗口的marker,以carId作为标识
var carIdArr=new Array();
function drawBaiduMapCar(carId,lon,lat,carDeg){
baiduMap.clearOverlays();
setTimeout(function(){ //alert("==="+carId);
var pt = new BMap.Point(lon, lat);
//var pt = new BMap.Point(121.38750613, 31.1743319);
var marker = new BMap.Marker(pt,{icon:myIcon});
var sContent="<div class='tab1' id='tab1'>"+
"<div class='menuyq'>"+
"<ul><li id='one0' style='background-color:#ffffff' onclick='setTab(\"0\",\"con_one_\",2)'>实时信息</li>"+
"<li id='one1' onclick='setTab(\"1\",\"con_one_\",2)'>司机信息</li>"+
"<li id='one2' onclick='setTab(\"2\",\"con_one_\",2)'>车辆资料</li>"+
"</ul>"+
"<div class='menudiv'>"+
"<div id='con_one_0'>"+
"上海市闵行区莲花路。。。。。<br/>"+
"车牌号:"+carId+"<br/>"+
"经度:"+lon+"<br/>"+
"纬度:"+lat+"<br/>"+
"</div>"+
"<div id='con_one_1' style='display:none;'>司机信息==========="+
"<img style='float:right;margin:4px' id='imgDemo' src='http://app.baidu.com/map/images/tiananmen.jpg' width='139' height='104' title='天安门'/>"+
"</div>"+
"<div id='con_one_2' style='display:none;'>车辆资料==========</div>"+
"</div>"+
"</div>";
var infoWindow=new BMap.InfoWindow(sContent);//创建信息窗口对象
infoWindow.disableAutoPan();//关闭打开信息窗口时地图自动平移。
var label=new BMap.Label(carId);
label.setStyle({marginTop:"40px",marginLeft:"5px",color:"#006DFF",fontSize:"12px"});
marker.setLabel(label);
marker.setRotation(carDeg);
//添加覆盖物
baiduMap.addOverlay(marker);
if(carIdArr.indexOf(carId)==0){//前面点击过,还需要继续显示
marker.openInfoWindow(infoWindow);
if(chooseDivId.length!=0){
setTab(chooseDivId[chooseDivId.length-1],"con_one_",2);//取最后一次点击的项
}else{
setTab("0","con_one_",2);
}
document.getElementById('imgDemo').onload = function (){
infoWindow.redraw();
}
}
marker.addEventListener("click",function(){
if(carIdArr.indexOf(carId)==-1){
carIdArr=[];//清空
carIdArr.push(carId);
}
this.openInfoWindow(infoWindow);
//图片加载完毕重绘infowindow
document.getElementById('imgDemo').onload = function (){
infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片部分被隐藏
}
}); infoWindow.addEventListener("clickclose",function(){//点击信息窗口的关闭按钮时触发此事件
carIdArr=[];
chooseDivId=[];
}); },0);
}
</script>
百度地图JavaScript API自定义覆盖物、自定义信息窗口增删时的显示问题的更多相关文章
- 百度地图JavaScript API覆盖物旋转时出现偏移
在项目中,调用百度地图JavaScript API,做覆盖物的旋转再添加到地图上,结果出现偏移了. 调试过程中的效果图: 发现图片的旋转并不是按车子的中心来的,而是之外的一个点.最后发现犯了一个很细节 ...
- 百度地图JavaScript API使用
最近在完成优达学城前端开发(入门)课程的P4项目中,要求调用google地图进行交互,项目已提供部分js代码和html代码.但在申请google地图API密钥时由于网络等原因,打不开或者连接超时,所以 ...
- 百度地图JavaScript API经纬度查询-MAP
百度地图JavaScript API经纬度查询-MAP-ABCDEFGHIJKMHNOPQRSTUVWXYZ: 搜索:<input type="text" size=&quo ...
- 【百度地图JavaScript API】手机端浏览器定位的实现
[百度地图JavaScript API]手机端浏览器定位的实现 https://blog.csdn.net/xiao190128/article/details/72579476
- 百度地图JavaScript API V1.5初级开发工具类
/** * 百度地图使用工具类-v1.5 * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @email boo ...
- 百度地图Javascript API 调用示例
调用示例 !<!DOCTYPE html> <html> <head> <title>百度地图DEMO</title> </head& ...
- 基于百度地图JavaScript API,员工住址统计
公司一般都有通讯和住址的统计,但是文字化的表格根本就不知道住在哪. 用百度地图就可以轻松解决, 而且公司还经常人员变动,读取excel中的内容,就不用每次还要更改地图文件了. 在遇到需要聚餐在地图中标 ...
- 百度地图 JavaScript API 极速版 开发体会
前段时间百度地图API推出了 JavaScript API 极速版 1.0 简单看了一下,从产品定位来说真是挺好. 把开发人员细分成普通web开发人员和移动web开发人员.正好用到了手机地图这块决定尝 ...
- 百度地图JavaScript API本地搜索的结果面板
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
随机推荐
- java 上传POJO model jar
打开eclipse----找到要打包的java文件,右键----Export----选择 JAR File 然后NEXT,会让你选择打包的文件,,选择你想打包的,一个或几个.... 在文件选择框的下面 ...
- 《Python标准库》 目录
目录 译者序序前言第1章 文本1.1 string—文本常量和模板1.1.1 函数1.1.2 模板1.1.3 高级模板1.2 textwrap—格式化文本段落1.2.1 示例数据1.2.2 填充段落1 ...
- python-getattr
getattr(object, name[, default]) Return the value of the named attribute of object. name must be a ...
- Http压力测试工具HttpTest4Net
HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的P ...
- mono for android学习过程系列教程(7)
首先说个抱歉,这段时候由于个人原因未及时更新博客.故此今天先给大家来个小料. 以后会及时更新我自己的学习过程. 不多说,终于私人生活安定下来了,可以安心学习.直接进入主体: 今天咱们摒弃所有的前面的知 ...
- Java多线程9:ThreadLocal源码剖析
ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value).get().remove().先剖析源码清楚地知道ThreadLocal是 ...
- Unity3D入门之Unity3D介绍以及编辑器的使用(1)
1.Unity3D介绍 Unity3D是跨平台(IOS.Android.Windows Phone.Windows.Flash.XBOX360.PS3.Wii等)游戏引擎,可以开发2D.2.5D.3D ...
- Angular实现递归指令 - Tree View
在层次数据结构展示中,树是一种极其常见的展现方式.比如系统中目录结构.企业组织结构.电子商务产品分类都是常见的树形结构数据. 这里我们采用Angular的方式来实现这类常见的tree view结构. ...
- C#执行外部程序之执行DOS命令和批处理
在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便.今天就来说一下C#中如何调用外部程序,执行一些特殊任务. 这 ...
- C#Light 小幅升级,支持快速绑定匿名函数、Lambda表达式
二话不说直接上图 new RegHelper_Function(delegate,funcname);即可 因为匿名函数没有名字,制定一个函数名就可以从脚本调用了. 原来的绑定实名函数方法也小幅调整为 ...