日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于百度地图 BMap.InfoWindow 只显示最后一条信息解决方法

發布時間:2024/9/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于百度地图 BMap.InfoWindow 只显示最后一条信息解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉摘:http://blog.csdn.net/guo_love_peng/article/details/8674230

今天遇到這個問題了。后面再網上搜搜,發現都是你抄我,我轉載你的,后來無意看到一篇文章,說是用閉包后來解決了。現在把問題解決方法發出來

function baiduMapFunction(divId, hotelArray) { var map = new BMap.Map(divId);// 創建百度地圖對象 map.centerAndZoom(new BMap.Point(116.404, 39.915), 12); map.enableScrollWheelZoom(); // 啟用滾輪放大縮小,默認禁用 map.enableContinuousZoom(); // 啟用地圖慣性拖拽,默認禁用 map.addControl(new BMap.NavigationControl()); // 添加默認縮放平移控件,左上角 map.addControl(new BMap.ScaleControl()); // 添加默認比例尺控件 map.addControl(new BMap.MapTypeControl({ anchor : BMAP_ANCHOR_TOP_RIGHT })); // 左上角,默認地圖控件 for ( var o in hotelArray) { var point = new BMap.Point(hotelArray[o].lng, hotelArray[o].lat);// 坐標點 var hotelNameLabel = new BMap.Label(hotelArray[o].hotelName, { offset : new BMap.Size(20, -10) });// 標注顯示名稱 var sContent = "<div>" + "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>" + hotelArray[o].hotelName + "</h4>" + "<img style='float:right;margin:4px' id='imgDemo' src='../images/" + hotelArray[o].srcImage + "' width='139' height='104' title=''/>" + "<p style='margin:0;line-height:1.5;font-size:13px;text-indent:2em'>" + hotelArray[o].hotelAddress + "</p>" + "</div>"; // 設置label 文本框的樣式 hotelNameLabel.setStyle({ "borderColor" : "red", "color" : "red", "cursor" : "pointer" }); console.log(hotelArray[o].srcImage + sContent); createMark = function(lng, lat, info_html) { var _marker = new BMap.Marker(new BMap.Point(lng, lat)); _marker.addEventListener("click", function(e) { this.openInfoWindow(new BMap.InfoWindow(info_html)); }); _marker.addEventListener("mouseover", function(e) { this.setTitle("位于: " + lng + "," + lat); }); return _marker; }; var marker = createMark(hotelArray[o].lng, hotelArray[o].lat, sContent); map.addOverlay(marker); marker.setLabel(hotelNameLabel); // 添加百度label } city = new BMap.LocalSearch(map, { renderOptions : { map : map, autoViewport : true } }); // 地圖顯示到查詢結果處 } function searchCity() { var s = $("#searchValue").val(); console.log(s); city.search(s); // 查找城市 }

上面這個函數,就接受一個json數組對象,和一個在你頁面的divId。因為要顯示地圖

先把地圖初始化之后,在循環里面一次從json中讀取數據,然后new 出標注對象。再為每個標注對象添加監聽方法

在添加監聽方法的時候,會遇到,不管點擊哪一個標注,都是輸出最后一條的信息。

這主要是作用域的問題,之后寫了個閉包的方法。

如下

var createMark = function(lng, lat, info_html) { var _marker = new BMap.Marker(new BMap.Point(lng, lat)); _marker.addEventListener("click", function(e) { this.openInfoWindow(new BMap.InfoWindow(info_html)); }); _marker.addEventListener("mouseover", function(e) { this.setTitle("位于: " + lng + "," + lat); }); return _marker; };

將經緯度,和顯示信息單獨放在函數里,new標注之后,立刻加監聽。

這樣之后就解決了這個問題了

總結

以上是生活随笔為你收集整理的关于百度地图 BMap.InfoWindow 只显示最后一条信息解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。