中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Vue結合高德地圖怎么實現HTML寫自定義信息彈窗

發布時間:2023-04-27 11:12:23 來源:億速云 閱讀:158 作者:iii 欄目:開發技術

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

效果圖如下:

Vue結合高德地圖怎么實現HTML寫自定義信息彈窗

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

Vue結合高德地圖怎么實現HTML寫自定義信息彈窗

先看下后臺返回的數據類型:

      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內,這樣我們就可以不用再寫一些innerHTMLappendChild此類的代碼了!

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南漳县| 辛集市| 荔浦县| 来安县| 东平县| 营口市| 万安县| 佛教| 张家川| 桃园市| 印江| 曲靖市| 新营市| 通海县| 布拖县| 库伦旗| 长白| 虞城县| 温宿县| 海阳市| 南投市| 武平县| 金川县| 紫云| 红桥区| 那坡县| 凤城市| 靖边县| 九台市| 凤台县| 太仓市| 顺平县| 嵊泗县| 淳安县| 慈利县| 弥渡县| 射洪县| 伊川县| 陇川县| 高陵县| 乐山市|