第一次寫東西,技術水平不是很高,只是爲了方便記憶。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,打完收工,第一次寫這個,感受還行。就是寫的東西沒什麼技術含量,汗。。。。。。