在做项目的过程中,发现了在使用百度地图的过程中,加入多个Marker和多个InfoWindow的时候,多个Marker可以在地图上不同的坐标点显示出来,但是当点击不同的Marker的时候,显示的总是最后一个Marker对应的InfoWindow。至少直接写For循环是这个样子的。

于是乎我看到之前的代码是对应着写:Marker1,InfoWindow1, Marker2,InfoWindow2, Marker3,InfoWindow3。我的个天呀,如果是100个呢?那得有多少的代码呀?

下面的代码是在原代码的基础上修改的,肯定还有很大提升的空间。

我们取到的数据,也就是下面data中的数据:

[{"Id":"2a20ee78-f201-4618-955a-a0d0b6bc5ba4","AppInfoId":0,"ParentId":"a2928e7e-a2af-4028-91aa-276e8b197f14","ParentName":"","CollectionTypeId":0,"Name":"落霞水榭码头","Introduce":"落霞水榭游船码头集观光、旅游等多种功能于一身、牡丹园等景点。","Longitude":"114.388207","Latitude":"30.578016","PixelX":"3390","PixelY":"1530","CollectionCount":0,"Rank":0,"IsEnable":1,"CreateUserId":"","CreateTime":"0001-01-0100:00:00","UpdateTime":"2014-03-1411:02:11","ImageUrls":[],"ScenicSpots":[],"VoiceIds":"/Resources/Voices/0001.mp3"},{"Id":"a9246850-d393-41f6-99a5-f2ef90dbcbde","AppInfoId":0,"ParentId":"a2928e7e-a2af-4028-91aa-276e8b197f14","ParentName":"","CollectionTypeId":0,"Name":"汉街中心码头","Introduce":"汉街中心码头位于沙湖湖畔","Longitude":"114.340402","Latitude":"30.566693","PixelX":"340","PixelY":"740","CollectionCount":0,"Rank":0,"IsEnable":1,"CreateUserId":"","CreateTime":"2014-01-0716:48:01","UpdateTime":"2014-01-18 16:37:30","ImageUrls":[],"ScenicSpots":[],"VoiceIds":"/Resources/Voices/donghutest.mp3"},{"Id":"ecb5128d-be9b-49d0-a7dc-eb527217fa62","AppInfoId":0,"ParentId":"a2928e7e-a2af-4028-91aa-276e8b197f14","ParentName":"","CollectionTypeId":0,"Name":"磨山梅园码头","Introduce":"磨山梅磨山梅园码头依山傍水,","Longitude":"114.410607","Latitude":"30.555938","PixelX":"2790","PixelY":"2800","CollectionCount":0,"Rank":0,"IsEnable":1,"CreateUserId":"","CreateTime":"2014-01-1818:48:01","UpdateTime":"2014-01-2017:40:15","ImageUrls":[],"ScenicSpots":[],"VoiceIds":""}]
//获取子景点var scenicSpots;$(function () {getList();})function getList() {// 不同的应用所调用的API参数是不相同的,请修改$.getJSON("/api", {},function (data) {scenicSpots = data;var myIcon = new BMap.Icon("poi.png", new BMap.Size(23, 33), {    //offset: new BMap.Size(0, 0),    //相当于CSS精灵imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。});var myIconHover = new BMap.Icon("poi_hover.png", new BMap.Size(40, 50), {    //小车图片offset: new BMap.Size(-7, -7),    //相当于CSS精灵imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。});for (var i = 0; i < scenicSpots.length; i++) {            var point = new BMap.Point(scenicSpots[i].Longitude, scenicSpots[i].Latitude);     //POI点坐标var marker = new BMap.Marker(point, { icon: myIcon });var iw = createInfoWindow(i);                     drawMap.addOverlay(marker);(function () {var index = i;var _iw = createInfoWindow(i);var _marker = marker;_marker.addEventListener("click", function () {this.openInfoWindow(_iw);});_iw.addEventListener("open", function () {                           _marker.setIcon(myIconHover);})_iw.addEventListener("close", function () {_marker.setIcon(myIcon);})})()}                    })}//对应不同的Marker创建不同的InfoWindowfunction createInfoWindow(i) {var sContent = "<div class='mark_tip_top'><p>" + scenicSpots[i].Introduce + "</p></div><div class='mark_tip_bottom' data-audio='" + scenicSpots[i].VoiceIds + "'><a class='play' href='javascript:void(0);'><span><i>语音</i></span></a><a class='' href='/EastLakeBoat/BeautyPicture/BeautyPictureByScenicSpotId?id=" + scenicSpots[i].Id + "'><span><i>图片</i></span></a><a class='go_map' οnclick='return gomap_oclick(0)'><span><i>去这</i></span></a></div>";var iw = new BMap.InfoWindow("", { enableMessage: false });iw.setTitle("<label style=\"font-size: 16px;font-weight: bold;color: #CD533F;font-family: 'microsoft yahei';\">" + scenicSpots[i].Name + "</label>");iw.setContent(sContent);return iw;}

转载于:https://www.cnblogs.com/crmhf/p/3823245.html

[原]解决百度地图多个Marker和InfoWindow时总是打开最后一个InfoWindow的问题相关推荐

  1. 完美解决百度地图MarkerClusterer 移动地图时,Marker 的Label 丢失的问题

    完美解决百度地图MarkerClusterer 移动地图时,Marker 的Label 丢失的问题 参考文章: (1)完美解决百度地图MarkerClusterer 移动地图时,Marker 的Lab ...

  2. 解决百度地图多个标注覆盖不能响应点击的问题

    百度地图开发常用网站 1.百度地图开放平台 http://lbsyun.baidu.com/ 2.百度地图 Javascript API JavaScript API v3.0 http://lbsy ...

  3. android 百度地图闪退,Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法...

    使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.xml文件中未在application标签中配置 android:name="com.baidu.lbsapi.A ...

  4. 前端解决百度地图地址逆解析(BMap.Geocoder())异步问题

    前端解决百度地图地址逆解析(BMap.Geocoder())异步问题 需求:将接口返回的坐标数据转换成详细的地址并渲染在页面上 问题:页面先渲染,地址后解析,导致渲染时没有数据显示 解决方法:new ...

  5. android 百度地图禁止双击放大缩小,百度地图API 在使用点聚合时,如果放大、缩小或移动地图时,添加的文字标签会消失...

    问题:如题,百度地图API 在使用点聚合时,如果放大.缩小或移动地图时,添加的文字标签(label)会消失. 原因:API代码中的map.removeOverlay(marker),在这句话执行的时候 ...

  6. JS使用技巧-如何解决谷歌浏览器下载图片、PDF文档时只打开不下载的问题?

    问题描述: 页面下载跨域的图片.pdf文件,浏览器总是自动打开,并且在下载列表里面不显示. 如何解决谷歌浏览器下载图片.PDF文档时只打开不下载的问题?如何变成直接下载? 解决方法: 使用js获取下载 ...

  7. 解决百度地图内存泄露问题

    百度地图内存泄露问题 百度地图中,我们会遇到循环创建marker点时内存占用不停上涨导致页面直接崩掉.或者数据量过大页面渲染CPU占用过高导致页面卡死. 如图: 需求实例: 使用百度地图展示车辆的位置 ...

  8. 解决 百度地图多点聚合卡顿问题

    由于百度地图提供的MarkerClusterer_min.js 比较卡顿 特此提供加速后的MarkerClusterer_min.js 源码如下 /*** @fileoverview MarkerCl ...

  9. android 百度map 一个layout加载多个mapview,android 百度地图API 使用Marker和InfoWindow

    前言:在android开发过程中,百度地图的使用是比较普遍的,但是如何使用,使用什么版本的百度API还是需要一些讲究. 在项目过程中,需要用到百度地图的marker和InfoWindow的功能. 标注 ...

  10. 解决百度地图(new BMap.Autocomplete)影响input赋值的问题

    在最近做的vue项目中,由于业务需求在页面中嵌入了百度地图,发现嵌入之后旁边的输入框的默认值不显示了,但是打印后发现是有值的,输入框却不显示,需要点击一下输入框才会展示 在排查之后发现是地图的Auto ...

最新文章

  1. 什么是 prelink
  2. 神经网络第一步,手写数字识别的例子分享给大家
  3. Maven-Could not resolve artifact org.apache.maven.archetypes:maven-archetype-quickstart:jar:1.1
  4. 全球及中国初榨鳄梨油行业发展潜力及投资规模预测报告2022版
  5. 深入了解React新引擎:React Fiber
  6. (23)Verilog HDL条件语句:if-else语句
  7. 专为控制打印设计的CSS样式
  8. socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
  9. 鸿蒙来了!能否与安卓、iOS三足鼎立?
  10. Flex 与外部的数据通信(HTTPService,URLLoader和URLRequest)
  11. 十六、C语言中的头文件与模块化设计
  12. iPhone各机型屏幕尺寸
  13. 利用python打乱xlsx表格
  14. Python excel批量自动邮件发送
  15. _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringB5cxx11Ev
  16. 《心灵捕手》中的10段经典台词(10 classic lines from Good Will Hunting)
  17. win10电脑玩红警老是卡死怎么办?win10电脑玩红警老是卡死解决方法
  18. 设置java进程名称_如何为Java程序设置进程名称? - java
  19. 改变虚拟导航栏(navigation bar)背景色及图标颜色
  20. Conv2Former

热门文章

  1. c语言crc校验库函数,CRC校验原理及其C语言实现
  2. mysql 去重 性能比较_mysql 去重方法distinct 与 group by 性能比较 | 学步园
  3. linux 占用缓存前10_MySQL基于linux的内存分析
  4. 组合拍卖算法 应用例子
  5. C++ Make、Makefile、CMake和CMakeLists关系
  6. pycharm python InvalidVersionSpecError: Invalid version spec: =2.7
  7. 区块链 以太坊 入门知识
  8. 区块链 以太坊 虚拟机 opcode是什么
  9. 有关计算机的未来想象作文,电脑的想象作文
  10. 基于SSM的旅游信息平台