百度地图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 ...
随机推荐
- javascript自学002--DOM事件
事件流:元素接收事件的顺序 1.事件冒泡:事件由最具体的元素开始接收,逐级向上传递到document元素.即从里到外. 2.事件捕获:由外到里,先接收的是document然后逐级向内,最后才到具体的元 ...
- asp.net中gridview的checkbox使用总结
1.在gridview中的<column>中加入 <asp:TemplateField HeaderText="选择"> <ItemTemplate& ...
- OpenCv编程
(1)用OpenCv加载.显示.保存图片: //加载图片 IplImage* m_img;//定义IplImage格式的图片头指针: m_img=cvLoadImage(m_imgLoc);//装载m ...
- ZabbixCPU温度监视-windows2008R2
1, speed-fan安装 SpeedFan - Access temperature sensor in your computer / http://www.almico.com/speedfa ...
- 小谈 - web模仿手机打电话与正则表达式
昨天遇到了一个很棘手的问题,就是手机端调用web端的页面,如果用编辑器插入的内容页面中有电话的的数据就要变一下格式,让手机端可以实现拨号的功能. 研究了半天就是没一点头绪,但是偶尔看到数据中每一个电话 ...
- 高性能网站架构设计之缓存篇(2)- Redis C#客户端
在上一篇中我简单的介绍了如何利用redis自带的客户端连接server并执行命令来操作它,但是如何在我们做的项目或产品中操作这个强大的内存数据库呢?首先我们来了解一下redis的原理吧. 官方文档上是 ...
- Python3实现TCP端口扫描器
本文来自 高海峰对 玄魂工作室 的投稿 作者:高海峰 QQ:543589796 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可 ...
- [.net 面向对象程序设计进阶] (8) 托管与非托管
本节导读:虽然在.NET编程过程中,绝大多数内存垃圾回收由CLR(公共语言运行时)自动回收,但也有很多需要我们编码回收.掌握托管与非托管的基本知识,可以有效避免某些情况下导致的程序异常. 1.什么是托 ...
- 用canvas开发H5游戏小记
自神经猫风波之后,微信中的各种小游戏如雨后春笋般目不暇接,这种低成本,高效传播的案例很是受开发者青睐.作为一名前端,随手写个这样的小游戏出来应该算是必备技能吧.恰逢中秋节,部门决定上线一个小游戏,在微 ...
- Unity3D音乐音效研究-MIDI与波表
其实音乐音效这个命题本身没什么好研究的. Unity3D提供了丰富的结构和使用方式,足够使用了. 但是我有一些小小的想法和需求,一般的Unity资料并没有给我答案. 一个是容量要小.MP3.OGG的高 ...