vue + 高德地图 + 标记点(变大变小闪烁动画、多标记点、同一位置标记点显示个数)

其他:
高德地图引入及使用
vue + 高德地图 + 普通标记点

先上效果图:
在这里插入图片描述

	  //绘制地图
	  this.map = new AMap.Map('map', {
        resizeEnable: true,
        center: center,
        zoom: 12
      })
      // 标记点的数据
	  this.deviceList = [
	  	{
	  	  longitude:120,
	  	  latitude:35,
	  	  statusType:'alarmDevice'
	  	},
	  	{
	  	  longitude:120,
	  	  latitude:30,
	  	  statusType:'alarmDevice'
	  	},
	  	{
	  	  longitude:120,
	  	  latitude:30,
	  	  statusType:'alarmDevice'
	  	}
	  ]
	  // 清除先前标记点
      if (this.markerPointList.length !== 0) { // 定时获取点数据,更新前需先清掉原来点
        this.map.remove(this.markerPointList)
        this.markerPointList = []
      }
      // 绘制标记点
      this.deviceList.forEach(value => {
        if (value.longitude !== null && value.latitude !== null) {
          var markerPoint = new AMap.Marker({
            position: [value.longitude, value.latitude],
            offset: new AMap.Pixel(-15.1, -15.9) //点偏移量
          })
          // 创建标记点的div
          var markerDiv = document.createElement('div')
          // 设置标记点className,用于设置点的样式(动画)
          markerDiv.className = value.statusType
          // 点内部文字:找到相同经纬度点列表:sameLonLatPoint,列表长度即为该点显示个数
          var sameLonLatPoint = this.deviceList.filter((val) => {
            return val.longitude === value.longitude && val.latitude === value.latitude
          })
          // 创建标记点内容span
          var markerSpan = document.createElement('span')
          // 某位置点不唯一时展示个数
          markerSpan.innerText = sameLonLatPoint.length !== 1 ? sameLonLatPoint.length : ''
          // 将内容span放到标记点div
          markerDiv.appendChild(markerSpan)
		  // 将标记点div,设置为标记点内容
          markerPoint.setContent(markerDiv)
          // 标记点的list,清空点时用
          this.markerPointList.push(markerPoint)
          // 将标记点绘制到地图
          this.map.add(markerPoint)
        }
      })

标记点样式(此处只写了.alarmDevice的样式,其他的都一样了,只有颜色不同)

<style>
.alarmDevice{
  text-align:center;
  margin: 0 auto;
  width: 30px;
  height: 30px;
  background-color: #f13737;
  box-shadow:0px 0px 15px #f61212;
  border-radius: 50%;
  -webkit-animation-name: 'alarmDeviceBreath';/*动画属性名,也就是我们前面keyframes定义的动画名*/
  -webkit-animation-duration: 1s;/*动画持续时间*/
  -webkit-animation-timing-function: ease; /*动画频率,和transition-timing-function是一样的*/
  -webkit-animation-delay: 0s;/*动画延迟时间*/
  -webkit-animation-iteration-count: infinite;/*定义循环资料,infinite为无限次*/
  -webkit-animation-direction: alternate;/*定义动画方式*/
}
@keyframes alarmDeviceBreath{
  0% {margin-left: 0;margin-top: 0;width:30px;height:30px;box-shadow:0px 0px 15px #f61212;opacity: 1.2;}

  100% {margin-left: 5px;margin-top: 5px;width:20px;height:20px;box-shadow:0px 0px 10px #f61212;opacity: 0.6;}
}
.normalDevice span,
.offLineDevice span,
.alarmDevice span{
  line-height:30px;
  font-size:13px;
  -webkit-animation-name: 'breathSpan';
  -webkit-animation-duration: 1s;
  -webkit-animation-timing-function: ease;
  -webkit-animation-delay: 0s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-direction: alternate;
}
@keyframes breathSpan{
  0% {line-height:30px}

  100% {line-height:20px}
}
</style>
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Vue中使用高德地图可以通过引入AMap库实现。在实现多个标记时,需要先定义一个地图容器,然后通过循环遍历数据数组,在每个数据项上添加一个标记。 以下是一个简单的示例代码: ```html <template> <div id="map-container" style="height: 400px;"></div> </template> <script> import AMapLoader from '@amap/amap-jsapi-loader'; export default { name: 'Map', data() { return { map: null, // 地图对象 markers: [ // 标记数据数组 { lnglat: [116.397428, 39.90923], title: 'Marker1' }, { lnglat: [116.397428, 39.90963], title: 'Marker2' }, { lnglat: [116.397928, 39.90963], title: 'Marker3' } ] }; }, async mounted() { await AMapLoader.load({ key: 'your amap key', version: '2.0', plugins: ['AMap.ToolBar'] }); this.initMap(); }, methods: { initMap() { this.map = new window.AMap.Map('map-container', { zoom: 13, center: [116.397428, 39.90923] }); this.addMarkers(); // 添加标记 }, addMarkers() { this.markers.forEach(marker => { const [longitude, latitude] = marker.lnglat; const markerObj = new window.AMap.Marker({ position: [longitude, latitude], title: marker.title, map: this.map }); markerObj.on('click', () => { console.log(marker.title); }); }); } } }; </script> ``` 在上述代码中,首先通过AMapLoader引入高德地图API,并在mounted钩子函数中初始化地图。然后在addMarkers方法中遍历标记数据数组,创建标记对象,设置位置、标题、地图等属性,并在地图上添加标记对象。最后通过on方法为每个标记添加击事件。 在模板中只需要定义一个地图容器元素即可,地图会自动填充该元素的大小。 需要注意的是,在使用高德地图API时需要先申请key,并在引入API时传入key值。同时,由于高德地图API是异步加载的,因此需要使用await关键字等待API加载完毕后再执行地图相关操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值