让高德地图上点标记显示发光效果

  第一次写东西,技术水平不是很高,只是为了方便记忆。css

  最近项目中有一个在地图上显示定位的需求,这原本没什么,只要初始化一个地图,将后台传过来的定位信息经过高德API在地图上显示就好了,最主要的是须要让点像光源同样有闪烁的效果,原本是想在网上找一下copy的,结果没找到。因此本身研究了一下。html

  为了方便记忆,因此会将从怎么建立地图,到显示定位点的整个过程纪录下来。vue

  首先声明这里用的是vue加高德API,第一步,将高德API引入vue,在这里先将下面这句代码放到index.html的头部。webpack

<script src="https://webapi.amap.com/maps?v=1.4.10&key=你的key值"></script>

  而后在webpack.base.conf.js中加入,这里window.AMap好像能够直接写AMapweb

externals: { 'AMap': 'window.AMap' }

  而后在你须要的界面引用就好了api

import AMap from 'AMap'

  到此为止,是前期的准备工做。动画

  接下来开始建立地图了,由于有时须要在地图上作数据更新,因此须要把地图的建立用一个方法提取出来,只在mounted里调用一次就行,避免数据更新是重复建立。ui

initmap() { //建立地图
            this.map = new AMap.Map("container", { center: [120.061897, 30.356648], //设置中心点
                // pitch: 60,
                // rotation: -35,
                resizeEnable: true, //是否监控地图容器尺寸变化
                features: ["bg", "road", "point"], //隐藏默认楼块
                mapStyle: "amap://styles/bf8a443a1cae459d53212187f63b444c", //设置地图的显示样式
                // layers: [new AMap.TileLayer.Satellite()], //地图图层(卫星图层) new AMap.TileLayer()
                zoom: 16 //地图显示的缩放级别
 }); }

  这里值得注意的是mapStyle这个参数的值里bf8a443a1cae459d53212187f63b444c这个值,是我登陆高德开发者平台,在自定义地图里本身建立发布的一个地图样式,我的认为根据图片建立地图更舒服一些。this

  接下来,由于咱们的后台数据尚未对接好,因此本身定义了一条假数据。spa

var capitals = [ { center:[120.060824,30.357574], color:'#00e921', animations:'myfirst01' }, { center:[120.061824,30.358574], color:'#fffa02', animations:'myfirst02' }, { center:[120.062824,30.354574], color:'#00e921', animations:'myfirst01' }, { center:[120.063824,30.35974], color:'#fffa02', animations:'myfirst02' }, { center:[120.057824,30.352574], color:'#00e921', animations:'myfirst01' }, { center:[120.056824,30.354574], color:'#fffa02', animations:'myfirst02' }, { center:[120.055824,30.360574], color:'#98014e', animations:'myfirst03' }, { center:[120.071824,30.358574], color:'#98014e', animations:'myfirst03' }, { center:[120.061824,30.358574], color:'#ff7d00', animations:'myfirst04' }, { center:[120.061824,30.358574], color:'#ff7d00', animations:'myfirst04' }, ]

  在这里解释一下为何会有animations这个属性,这是由于我在这里作了两种效果,等一下会一一解释。在这以前我在高德地图上加定位标记都是点标记,经过new AMap.Marker()。可是这个方法只支持对直径,颜色,透明度,边框直径,边框颜色,边框透明度的修改,并无对点标记样式的修改,固然,你也可让ui给你设计一款图片,可是图片加载总会耗资源的,最后找了一会发现其实文本标记是能够随意修改样式的,因此最后第一种方法是这样的:

js

for(var i=0;i<capitals.length;i+=1){ var text = new AMap.Text({ text:' ', textAlign:'center', verticalAlign:'middle', //middle 、bottom
                    draggable:true, cursor:'pointer', angle:10, style:{ 'width': '10px', 'height': '10px', 'border-radius': '50%', 'border-width': 0, 'text-align': 'center', 'font-size': '12px', 'color': 'blue', 'background-color':capitals[i].color, // '-moz-box-shadow': '0px 0px 20px 2px '+capitals[i].color,
                        // 'box-shadow': '0px 0px 20px 2px '+capitals[i].color,
                        'animation': capitals[i].animations+' 1s infinite', // 'animation': 'myfirst 1s infinite'
 }, position: capitals[i].center }) text.setMap(this.map); }

css

@keyframes myfirst01{ 0% { -moz-box-shadow: 0px 0px 10px 2px #00e921; box-shadow: 0px 0px 10px 2px #00e921; } 50% { -moz-box-shadow: 0px 0px 20px 2px #00e921; box-shadow: 0px 0px 20px 2px #00e921; } 100% { -moz-box-shadow: 0px 0px 10px 2px #00e921; box-shadow: 0px 0px 10px 2px #00e921; } } @keyframes myfirst02{ 0% { -moz-box-shadow: 0px 0px 10px 2px #fffa02; box-shadow: 0px 0px 10px 2px #fffa02; } 50% { -moz-box-shadow: 0px 0px 20px 2px #fffa02; box-shadow: 0px 0px 20px 2px #fffa02; } 100% { -moz-box-shadow: 0px 0px 10px 2px #fffa02; box-shadow: 0px 0px 10px 2px #fffa02; } } @keyframes myfirst03{ 0% { -moz-box-shadow: 0px 0px 10px 2px #98014e; box-shadow: 0px 0px 10px 2px #98014e; } 50% { -moz-box-shadow: 0px 0px 20px 2px #98014e; box-shadow: 0px 0px 20px 2px #98014e; } 100% { -moz-box-shadow: 0px 0px 10px 2px #98014e; box-shadow: 0px 0px 10px 2px #98014e; } } @keyframes myfirst04{ 0% { -moz-box-shadow: 0px 0px 10px 2px #ff7d00; box-shadow: 0px 0px 10px 2px #ff7d00; } 50% { -moz-box-shadow: 0px 0px 20px 2px #ff7d00; box-shadow: 0px 0px 20px 2px #ff7d00; } 100% { -moz-box-shadow: 0px 0px 10px 2px #ff7d00; box-shadow: 0px 0px 10px 2px #ff7d00; } }

  这种方法就须要用到animations这个属性,至于为啥会有这么多的动画,是由于我建立的点的颜色不止一种,若是对样式不满意的话能够本身修改,并无什么很偏僻的样式。

  尴尬!!!不知道怎么录屏,反正这种方法的效果就是本体大小不变,外部光圈大小改变。

  第二种方法就是:

js

for(var i=0;i<capitals.length;i+=1){ var text = new AMap.Text({ text:' ', textAlign:'center', verticalAlign:'middle', //middle 、bottom
                    draggable:true, cursor:'pointer', angle:10, style:{ 'width': '10px', 'height': '10px', 'border-radius': '50%', 'border-width': 0, 'text-align': 'center', 'font-size': '12px', 'color': 'blue', 'background-color':capitals[i].color, '-moz-box-shadow': '0px 0px 20px 2px '+capitals[i].color, 'box-shadow': '0px 0px 20px 2px '+capitals[i].color, // 'animation': capitals[i].animations+' 1s infinite',
                        'animation': 'myfirst 1s infinite' }, position: capitals[i].center }) text.setMap(this.map); }

css

@keyframes myfirst{ 0% {transform: scale(1);} 50% {transform: scale(1.5);} 100% {transform: scale(1);} }

  这种就是自己大小和光圈大小同时改变。一样,没有例子上传。

  ok,打完收工,第一次写这个,感受还行。就是写的东西没什么技术含量,汗。。。。。。

相关文章
相关标签/搜索