溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Vue結(jié)合高德地圖怎么實現(xiàn)HTML寫自定義信息彈窗

發(fā)布時間:2023-04-27 11:12:23 來源:億速云 閱讀:148 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Vue結(jié)合高德地圖怎么實現(xiàn)HTML寫自定義信息彈窗”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Vue結(jié)合高德地圖怎么實現(xiàn)HTML寫自定義信息彈窗”文章能幫助大家解決問題。

效果圖如下:

Vue結(jié)合高德地圖怎么實現(xiàn)HTML寫自定義信息彈窗

先說下思路吧,通過看高德地圖官方文檔關(guān)于InfoWindow的介紹,可以看出信息彈窗的顯示內(nèi)容,可以是HTML要素字符串或者HTMLElement對象。于是我就想到了在Vue里不是可以通過this.$refs獲取元素的DOM節(jié)點嗎?然后我就開始了第一次嘗試。

Vue結(jié)合高德地圖怎么實現(xiàn)HTML寫自定義信息彈窗

先看下后臺返回的數(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),這樣我們就可以不用再寫一些innerHTMLappendChild此類的代碼了!

關(guān)于“Vue結(jié)合高德地圖怎么實現(xiàn)HTML寫自定義信息彈窗”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細(xì)節(jié)

免責(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)容。

AI