zoukankan      html  css  js  c++  java
  • vue 结合百度地图(vue-baidu-map)点聚合,并点击开启信息窗口

    一、需要注意的是,不能在点聚合的标签上使用 v-for 否则点聚合无效,所以在点聚合标签下定义一个 div 如代码所示,图标也可以自定义,具体看代码注释

      1 <template>
      2   <div class="mapbox">
      3     <baidu-map
      4       class="map"
      5       @ready="handler"
      6       center="中国"
      7       :map-click="false">
      8       <bml-marker-clusterer
      9         :averageCenter="true"
     10       >
     11         <div
     12           v-for="(marker, i) of markers"
     13           :key="i">
     14           <bm-marker
     15             :dragging="true"
     16             animation="BMAP_ANIMATION_BOUNCE"
     17             :icon="{url: marker.url, size: {  300, height: 171 }}"
     18             :position="{lng: marker.lng, lat: marker.lat}"
     19             @click="infoWindowOpen(marker)"
     20           >
     21             <bm-info-window
     22               title="弹窗信息"
     23               :position="{lng: marker.lng, lat: marker.lat}"
     24               :show="marker.showFlag"
     25               @close="infoWindowClose(marker)"
     26               @open="infoWindowOpen(marker)"
     27             >
     28               <p>123456789</p>
     29               <p>123456789</p>
     30               <p>123456789</p>
     31               <p>123456789</p>
     32               <p>123456789</p>
     33             </bm-info-window>
     34           </bm-marker>
     35         </div>
     36       </bml-marker-clusterer>
     37     </baidu-map>
     38   </div>
     39 </template>
     40 
     41 <script>
     42 // 按需引入点聚合
     43 import { BmlMarkerClusterer } from 'vue-baidu-map'
     44 // 引入marker
     45 import BmMarker from 'vue-baidu-map/components/overlays/Marker'
     46 
     47 // 插入 100 个随机点
     48 const markers = []
     49 for (let i = 0; i < 100; i++) {
     50   const position = { lng: Math.random() * 40 + 85, lat: Math.random() * 30 + 21, url: 'http://developer.baidu.com/map/jsdemo/img/fox.gif', showFlag: false }
     51   const position1 = { lng: Math.random() * 40 + 85, lat: Math.random() * 30 + 21, url: 'https://cdn.tipe.io/tipe/tipe-cat-no-text.svg', showFlag: false }
     52   if (i % 2 === 0) {
     53     markers.push(position)
     54   } else {
     55     markers.push(position1)
     56   }
     57 }
     58 const carList = [
     59   {}
     60 ]
     61 export default {
     62   name: 'Bmaptrace',
     63   components: {
     64     BmlMarkerClusterer,
     65     BmMarker
     66   },
     67   data () {
     68     return {
     69       BMap: '',
     70       map: '',
     71       markers,
     72       carList,
     73       show: false
     74     }
     75   },
     76   methods: {
     77     handler ({ BMap, map }) {
     78       map.enableScrollWheelZoom(true)
     79       // map.centerAndZoom('青岛市', 13)
     80       // 赋值,方便调用,本节没用到
     81       this.BMap = BMap
     82       this.map = map
     83     },
     84     // 关闭信息窗口 @close 自带的方法
     85     infoWindowClose (marker) {
     86       marker.showFlag = false
     87       console.log(marker)
     88     },
     89     // 首先点击marker时开启信息窗口,其实没必要在 bm-info-window 上写 @open 因为如果是关闭状态根本就点不到,所以就无法触发 @open
     90     // 如果在 bm-info-window 上写了 @open 在点击marker时会触发两次infoWindowOpen函数,而且可以很明显的看到有延时
     91     infoWindowOpen (marker) {
     92       marker.showFlag = true
     93       console.log(marker)
     94     }
     95   }
     96 }
     97 </script>
     98 <style scoped>
     99 .map {
    100   height:800px;
    101 }
    102 </style>

    效果如图所示

  • 相关阅读:
    Sqlite EF6注册
    C# 等值锁定
    net 4.0+EF6+Sqlite 使用,安装,打包
    C#调用C++函数
    C# 调用.exe文件
    Java继承
    python多线程与threading模块
    Java对象构造
    python多线程与_thread模块
    Linux文件压缩与打包
  • 原文地址:https://www.cnblogs.com/caoxen/p/11352772.html
Copyright © 2011-2022 走看看