Echart3+vue實現自定義多色板塊遷徙地圖
成品圖
(vue)
一、需求
- 中國板塊中的每一個板塊按權重顏色不同
- 遷徙線條的顏色不同
- 遷徙路徑下的文字大小根據權重而定
- 實現遷徙的動態效果
二、實現思路
- 需要地圖,echart,vue的js檔案並分別引入(這裡地圖引入china.js)
- 一個記錄所有遷徙點的經緯度座標的物件
geoCoordMap
- 一個記錄出發點到遷徙點的對應關係陣列,每個遷徙點賦予value值對應權重和線條顏色
HZdata
- 一個記錄字型大小的變數
mapFontSize
- 在data中定義series
- mounted中初始化echart
- 在beforeDestroy中釋放定義了echart的變數
三、資料的處理和實現
// methods
getSeries() {
var _this = this
var series = [];
[
['杭州', BJdata]
].forEach(function(item, i) {
series.push(
{ // 遷徙的展示線
type: 'lines',
zlevel: 2,
effect: { // 顯示線上的特效
show: true ,
period: 3, // 特效動畫的時間
trailLength: 0.02, // 特效尾跡的長度
symbol: 'arrow', // 特效樣式
symbolSize: 5, // 特效大小
},
lineStyle: { // 線的樣式
normal: {
width: 1,
opacity: .5,
curveness: 0.2 // 邊的曲度
}
},
data: _this.convertData(item[1]) // 將定義好的遷徙對應陣列傳給convertData函式處理
},
{ // 遷徙點的效果
type: 'effectScatter', // 帶有漣漪特效動畫的散點(氣泡)圖
coordinateSystem: 'geo',
zlevel: 2,
rippleEffect: { // 漣漪特效相關配置
period: 4, // 特效動畫的時間
brushType: 'stroke', // 波紋的繪製方式,預設'fill'(效果類似呼吸燈),'stroke'(效果類似水波紋)
scale: 4 // 波紋的最大縮放比例
},
label: {
normal: {
show: true,
position: 'right',
offset: [13, 0],
formatter: '{b}', // 模板變數有 {a}、{b}、{c},分別表示系列名,資料名,資料值。
fontWeight: 'lighter'
},
emphasis: {
show: false
}
},
symbol: 'circle', // 標記的圖形
// 標記的圖形大小,這裡的大小不固定,根據value值來做計算
symbolSize: function(val) {
return 4 + val[2] / 10
},
itemStyle: {
normal: {
show: false,
color: '#fff'
}
},
data: item[1].map(function(dataItem, i) {
return {
// 每個遷徙點的name和value值,value為包含遷徙點座標點和遷徙點value的陣列
name: dataItem[0].name,
value: geoCoordMap[dataItem[0].name].concat([dataItem[0].value]),
// 這裡可以根據外層數量來單獨定義每個點的樣式大小等
label:{
normal:{
fontSize: 12
}
}
}
})
},
{
type: 'scatter', // 散點(氣泡)圖
coordinateSystem: 'geo',
zlevel: 2,
rippleEffect: { // 漣漪特效相關配置
period: 4, // 特效的執行時間
brushType: 'stroke', // 波紋的繪製方式,預設'fill'(效果類似呼吸燈),'stroke'(效果類似水波紋)
scale: 4 // 波紋的縮放比例
},
label: { // 是否顯示文字標籤
normal: {
show: false
}
},
symbol: 'circle', // 標記圖形
symbolSize: 10, // 標記圖形大小
itemStyle: {
normal: {
show: true,
color: '#9966cc'
}
},
// 資料展示
data: [{
name: '貴陽市',
value: [106.636577, 26.653325, 100]
}],
},
// 在這裡設定地圖每個模組的顏色
{
name: 'categoryA',
type: 'map',
geoIndex: 0,
tooltip: {show: true},
// 需要設定顏色的模組名稱,value對應visualMap中的顏色值
data:[
{ name: '北京', value: 0 },
{ name: '上海', value: 2 }
//.
//.
//.
],
}
)
})
this.series = series
},
convertData(data) {
var res = []
for (var i = 0; i < data.length; i++) {
var dataItem = data[i]
// 這裡data[i]的格式為[{name: '遷徙點名稱', value: '遷徙點的value值'}, {name: '出發點的名稱'}]
// 遷徙點的座標
var fromCoord = geoCoordMap[dataItem[0].name]
// 出發點的座標
var toCoord = geoCoordMap[dataItem[1].name]
if (fromCoord && toCoord) {
// 資料處理(這裡的陣列順序影響遷徙線中標記的指向,如果toCoord在前,則標記從出發點指向遷徙點,反之從遷徙點指向出發點)
res.push([
{
coord: toCoord
},
{
coord: fromCoord,
value: dataItem[0].value
}
])
}
}
return res
}
series定義好之後新增到option中,使用計算屬性即可
// computed
opt() {
let _this = this
let obj = {
visualMap: {
show: false,
min: 0,
max: 100,
// visualMap顏色值,對應方式是從高到低,這裡的顏色如果需要動態展示也可以定義在data中
color: ['#0aff45', '#e4ff88', '#0fe6ff', '#f36467']
},
geo: {
map: 'china', // 地圖名稱,如果是省級/市級區域,需要寫入中文,如北京地圖應該在這裡寫'北京'
label: {
emphasis: {
show: false // 是否顯示地圖上每個板塊的名稱
}
},
// 這個引數用於地圖的長寬比
// aspectScale: 0.5,
// 當前視角的縮放比例。
// zoom: 1.5,
layoutCenter: ['50%', '53%'],
layoutSize: '100%',
itemStyle: {
normal: {
borderWidth: 0,
opacity: .6
}
}
},
series: _this.series
}
return obj
}
相關推薦
Echart3+vue實現自定義多色板塊遷徙地圖
成品圖 (vue) 一、需求 中國板塊中的每一個板塊按權重顏色不同 遷徙線條的顏色不同 遷徙路徑下的文字大小根據權重而定 實現遷徙的動態效果 二、實現思路 需要地圖,echart,vue的js檔案並分別引入(這裡地圖引入china
自定義UITableView實現自定義左滑刪除按鈕及多按鈕,拖拽cell和表頭進行排序
本文介紹了能拖拽cell和表頭進行排序的自定義UITableView,並且能自定義左滑顯示的UIButton樣式。 先看左滑自定義按鈕效果圖 : override func tableView(_ tableView: UITableView, editA
vue自定義多選樣式
自定義多選框樣式 平時一直用的框架中的樣式,這次不行了 要自己寫。 做個筆記記錄一下 很久沒寫這中樣式了 設計要求的樣式 其實那個勾並不是checkbox,而是一個i標籤,給他的兩邊設定border
vue+elementui自定義Dialog元件之登入彈框話框實現(實現不同vue元件關聯)
elementui提供一個可實現彈框的元件el-dialog,一般會將彈框寫在一個vue檔案,通過el-dialog套用類似於這種 <el-button round @click="dialogFormVisible = true">登入</el-butt
Vue的elementUI實現自定義主題
使用vue開發專案,用到elementUI,根據官網的寫法,我們可以自定義主題來適應我們的專案要求,下面來介紹一下兩種方法實現的具體步驟,(可以參考官方文件自定義主題官方文件),先說專案中沒有使用scss編寫,用主題工具的方法(使用的較多) 第一種方法:使用命令列主題工具 使用vue
實現自定義view(2):仿Android QQ多螢幕顯示ListView的效果
本文在《仿 UC,墨跡天氣左右拖動 多螢幕顯示效果》的基礎上對程式碼進行修改,模仿Android QQ主介面的分屏ListView滑動效果。 當進行橫向滑動時,會切換螢幕,當縱向滑動時,ListView會滾動。 效果圖如下: 程式碼如下: FlingGallery.
Android自定義多TAB懸浮控制元件實現蘑菇街首頁效果
說明: 1.viewpager不能左右滑動; 2.轉載時程式碼略有改動(注:修復tab控制元件不能自動滑動的問題); 3.原始碼下載後不能直接執行,經過調整此問題已經修復。 核心程式碼: package com.Imy.Fuli.Fra
Vue directive自定義指令+canvas實現H5圖片壓縮上傳-Base64格式
前言 最近優化專案-手機拍照圖片太大,回顯速度比較慢,使用了vue的自定義指令實現H5壓縮上傳base64格式的圖片 canvas自定義指令 Vue.directive("canvas",
CSS 實現自定義樣式的單選框與多選框
前端在開發的過程中,經常會遇見使用單選框以及多選框的情況,但是預設的選框按鈕的樣式單一,一般我們需要去自定義一些選框按鈕的樣式; 通常情況下,單選、多選為方便自定義樣式,一般會採用input+
vue.js實現自定義輸入分頁
let ons substr inf div con ima com bsp 效果如下: html: <input type="text" value="1" v-model="page.page_my_selected" @blur="onBlur">
VUE2 配合mint-ui實現 自定義 loadmore(下拉重新整理,上拉更多)
<template> <div class="page-loadmore"> <h1 class="page-title">Pull up</h1> <p class="page-loadmore-de
研究MapReduce原始碼之實現自定義LineRecordReader完成多行讀取檔案內容
TextInputFormat是Hadoop預設的資料輸入格式,但是它只能一行一行的讀記錄,如果要讀取多行怎麼辦? 很簡單 自己寫一個輸入格式,然後寫一個對應的Recordreader就可以了,但是要實現確不是這麼簡單的 首先看看TextInputForma
MapReduce-MulitipleOutputs實現自定義輸出到多個目錄
輸入源資料樣例: Source1-0001 Source2-0002 Source1-0003 Source2-0004 Source1-0005 Source2-0006 Source3-0007 Source3-0008描述: Source1開頭的資料屬於集合A;Sou
vue 通過自定義指令實現 置頂操作;
body template binding info tel timer 實現 當前 png 項目需求:要求當前項目每個頁面滑到超出一屏的距離時,出現 backTop 按鈕,點擊則回到最頂端;俗稱置頂操作: 因為涉及到的頁面較多,每個頁面都加肯定顯得重復累贅,最終想到了 V
Vue+elementUI 自定義動態資料選單導航元件實現展開收縮+路由跳轉router-view渲染資料 路由跳轉到同一個頁面帶引數ID 自動重新整理資料
準備:匯入ElementUI 看官網教程 資料準備:JSON資料轉換成樹狀 參考文章: JS實現 JSON扁平資料轉換樹狀資料 後臺我拿的資料是這樣的格式: [ {id:1 , parentId: 0, name: '', level: 0}, {id:2 , parentId: 0, name: '',
vue 封裝自定義組件
lec com != 封裝 data als storage -m .com 先說說組件的結構 最好單獨放一個文件夾,有依賴的話裝依賴 Sjld.vue 內容 <template id="sjld"> <label >
如何實現自定義同步組件
nds 允許 oid try unlock all 同步 while name package com.chen;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQ
JS簡單實現自定義右鍵菜單
ans idt 右鍵 動畫 忘記 span spa round 部分 RT,一個簡單的例子,僅僅講述原理 <div id="menu" style="width: 0;height: 0;background: cadetblue;position: absolu
Notification的基本用法以及使用RemoteView實現自定義布局
解決 edi ngs 取消 ets lsp 過程 net tde Notification的作用 Notification是一種全局效果的通知,在系統的通知欄中顯示。既然作為通知,其基本作用有: 顯示接收到短消息、即時信息等 顯示客戶端的推送(廣告、優惠、新聞等)
vue(2) - 自定義指令
asc color true dom this == ont ron 指令 我們都知道v-for、v-html、等等都是指令:擴展html 語法 自定義指令: 屬性指令 Vue.deirctive(指令名稱,function(){ this.el ==>原生的do