百度地圖迴圈添加標註,並迴圈為標註添加資訊視窗問題解決

來源:互聯網
上載者:User

最近幾年在搞地圖方面的開發,主要是迴圈為座標添加標註並為標註添加彈出資訊視窗,起初My Code如下:

  var map = new BMap.Map("Mapcontainer");                var JsonObj = eval(JsonStr);                if (JsonObj != null) {                    for (var i = 0; i < JsonObj.length; i++) {                           var point = new BMap.Point(JsonObj[i].Visit_GPS_Longitude, JsonObj[i].Visit_GPS_Latitude);    // 建立點座標                           map.centerAndZoom(point, 13);                           var marker = new BMap.Marker(point);                           var opts = {                               width: 250,     // 資訊視窗寬度                               height: 100,     // 資訊視窗高度                               title: '<span style="font-size:15px;color:#0A8021">' + JsonObj[i].CustomerName + '</span>'   // 資訊視窗標題                           }                           //marker.setAnimation(BMAP_ANIMATION_BOUNCE);                           var content = "進店時間 " + JsonObj[i].VisitBeginTime + "<br/>離店時間 " + JsonObj[i].VisitEndTime;                           var info_Window = new BMap.InfoWindow(content, opts);  // 建立資訊視窗對象                           marker.addEventListener("click", function () {                               this.openInfoWindow(info_Window);                           });                           map.addOverlay(marker);                     }                     map.addControl(new BMap.NavigationControl()); 

這樣子確實能添加標註,也彈出資訊視窗,但是問題來了!彈出 的資訊視窗沒有變化,也就是說本來不同的標註上彈出 的資訊視窗應該是不一樣的,可以不知道怎麼回事

彈出的資訊視窗一直是最後的那個資訊視窗!折騰了好久,最後終於解決了,具體的代碼如下:

  var map = new BMap.Map("Mapcontainer");                var JsonObj = eval(JsonStr);                if (JsonObj != null) {                    for (var i = 0; i < JsonObj.length; i++) {                       (function (x) {                           var point = new BMap.Point(JsonObj[x].Visit_GPS_Longitude, JsonObj[x].Visit_GPS_Latitude);    // 建立點座標                           map.centerAndZoom(point, 13);                           var marker = new BMap.Marker(point);                           var opts = {                               width: 250,     // 資訊視窗寬度                               height: 100,     // 資訊視窗高度                               title: '<span style="font-size:15px;color:#0A8021">' + JsonObj[x].CustomerName + '</span>'   // 資訊視窗標題                           }                           //marker.setAnimation(BMAP_ANIMATION_BOUNCE);                           var content = "進店時間 " + JsonObj[x].VisitBeginTime + "<br/>離店時間 " + JsonObj[x].VisitEndTime;                           var info_Window = new BMap.InfoWindow(content, opts);  // 建立資訊視窗對象                           marker.addEventListener("click", function () {                               this.openInfoWindow(info_Window);                           });                           map.addOverlay(marker);                       })(i);                    }                     map.addControl(new BMap.NavigationControl());  

同樣是一個迴圈,但是在迴圈中使用了一個匿名函數,從而造成一個閉包將 i 的值鎖定在裡面,這樣外部的值已經變化,

但是傳到閉包裡面的值已經被保留,也就可以順利拿到應該取到的address[i]的內容了。
這樣雖然解決了問題,但是每添加一個點都會建立一個匿名函數,記憶體流失可能會是潛在隱患。
接下去, 我們就可以自由的在地圖上標註點並顯示對應的資訊了!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.