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