您好,登錄后才能下訂單哦!
這篇文章主要介紹“Vue結合高德地圖怎么實現HTML寫自定義信息彈窗”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Vue結合高德地圖怎么實現HTML寫自定義信息彈窗”文章能幫助大家解決問題。
效果圖如下:
先說下思路吧,通過看高德地圖官方文檔關于InfoWindow的介紹,可以看出信息彈窗的顯示內容,可以是HTML要素字符串或者HTMLElement對象。于是我就想到了在Vue里不是可以通過this.$refs
獲取元素的DOM節點嗎?然后我就開始了第一次嘗試。
先看下后臺返回的數據類型:
data: [ { id: '1', //id projectName: 'xxxx項目', //項目名稱 address: '山東省濟南市市中區xxxxxxxxxx', //項目地址 sketchMapUrl: '116.998232,36.651352', //項目坐標 startDate: '2022-06-18', //計劃開始日期 completedDate: '2022-11-18', //計劃結束日期 progress: '78', //施工進度 buildPeople: '32', //施工人員 alarmNum: '8' //告警信息數目 },{ id: '2', //id projectName: 'xxxx項目', //項目名稱 address: '山東省濟南市市中區xxxxxxxxxx', //項目地址 sketchMapUrl: '116.998232,36.651352', //項目坐標 startDate: '2022-06-18', //計劃開始日期 completedDate: '2022-11-18', //計劃結束日期 progress: '78', //施工進度 buildPeople: '32', //施工人員 alarmNum: '8' //告警信息數目 } ],
我一看這種數據類型不就是用v-for嗎?但是這個時候問題來了,不能直接循環后臺返回的數據!
原因有二:
高德地圖的AMap.InfoWindow的content屬性不支持多個DOM根節點
不知道用戶點擊的哪一個點
必須經過篩選,判斷用戶點擊的點.
this.data.map((item) => { this.arr = item.sketchMapUrl.split(',') //自定義點圖標 this.marker = new AMap.Marker({ map: this.map, icon: this.icon, position: [this.arr[0], this.arr[1]], offset: new AMap.Pixel(-13, -30), //注意,我這里判斷是給點加了個額外的參數,就是數據的id extData: item.id }) this.marker.on('click', (e) => { this.singleData = [] //這里通過e.target._opts.extData和item.id進行比對,如果相同則把這項點的信息單獨放一個數組里去遍歷,就是html里的遍歷數組 if (e.target._opts.extData === item.id) { this.singleData.push(item) } this.infoWindow.open(this.map, e.target.getPosition()) }) })
這個時候可以判斷點擊的點了,下一步要做的就是實現自定義彈窗了。
代碼如下:
<template> <div class="web-box"> <!-- 地圖 --> <div id="map"></div> <!-- 地圖彈窗 --> <div ref="infoWindow" class="infoWindow" > <div class="container" v-for="(item,index) in singleData" :key="index"> <!-- 這里面寫彈窗布局樣式 --> </div> </div> </template>
js代碼:
//自定義信息窗體 this.infoWindow = new AMap.InfoWindow({ isCustom: true, autoMove: true, avoid: [20, 20, 20, 20], content: this.$refs.infoWindow, closeWhenClickMap: true, offset: new AMap.Pixel(16, -30) })
通過this.$refs.infoWindow
拿到在HTML里寫的彈窗節點,放在content內,這樣我們就可以不用再寫一些innerHTML
和appendChild
此類的代碼了!
關于“Vue結合高德地圖怎么實現HTML寫自定義信息彈窗”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。