VUE-百度地圖新增覆蓋物及資訊視窗新增導航功能
阿新 • • 發佈:2020-07-23
一、新增覆蓋物
根據官方的文件直接開寫:
//api返回最近5公里內的所有單位資訊。
that.api.GetNearLocation(point.lat, point.lng).then(es => { var list = es.data.list; list.forEach(element => { var newpoint = new BMap.Point(element.Lng, element.Lat);var mk = new BMap.Marker(newpoint); var content = element.Content; var id = element.ID; content = "<h2>" + content + "</h2><br/><a id='ele_" + id+ "' class='btn'>導航至此處</a>"; var title = element.Content; map.addOverlay(mk); that.addClickHandler(content, title, mk, BMap, map, id,element.Lat, element.Lng); });// console.log(list); });
//註冊覆蓋物的點選事件 addClickHandler(content, title, marker, BMap, map, id,lat,lng) { var _this = this; marker.addEventListener("click", function(e) { // alert("z註冊"+id); _this.openInfo(content, title, e, BMap, map, id,lat,lng); }); },
此處需要說明,在資訊視窗正在開啟的時候如果就去註冊按鈕的事件,是註冊不上的,因為此時dom還沒渲染成功。於是我在此處加了個0.2S的延遲,解決註冊問題。
//開啟資訊視窗,並建立導航按鈕的點選事件 openInfo(content, title, e, BMap, map, id,lat,lng) { // debugger var _this = this; var p = e.target; var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat); map.panTo(point); var infoWindow = new BMap.InfoWindow(content, this.opts); // 建立資訊視窗物件 map.openInfoWindow(infoWindow, point); //開啟資訊視窗 setTimeout(() => { document.getElementById("ele_" + id).onclick = function() { _this.openidLocation(lat, lng,title); }; }, 200); }
在此處翻車了,調好了半天一直報沒有許可權。。兩個小時之後,突然想起來可能沒有在微信wx.config的jsApiList新增內建導航……狂暈。。。
最後新增上後,成功開啟內建地圖。
//開啟微信內建地圖,可呼叫手機導航APP, openidLocation(lat, lng,title) { // alert(lat); // alert(lng); var req= this.bMapToQQMap(lng,lat); wx.openLocation({ latitude: req[1], // 緯度,浮點數,範圍為90 ~ -90 longitude: req[0], // 經度,浮點數,範圍為180 ~ -180。 name: title, // 位置名 address: "世窗資訊:點選右側按鈕進入導航至"+title, // 地址詳情說明 scale: 13, // 地圖縮放級別,整形值,範圍從1~28。預設為最大 infoUrl: "" // 在檢視位置介面底部顯示的超連結,可點選跳轉 }); },