vue+vuex+axios+echarts画一个动态更新的中国地图
一. 生成项目及安装插件
# 安装vue-cli
npm install vue-cli -g
# 初始化项目
vue init webpack china-map
# 切到目录下
cd china-map
# 安装项目依赖
npm install
# 安装 vuex
npm install vuex --save
# 安装 axios
npm install axios --save
# 安装 ECharts
npm install echarts --save
二. 项目结构
├── index.html
├── main.js
├── components
│ └── index.vue
└── store
├── index.js # 组装模块及导出store的文件
└── modules
└── ChinaMap.js # 中国地图Vuex模块
三. 引入中国地图并绘制基本的图表
1.按需求引入与中国地图相关的Echarts图表和组。
// 主模块
let echarts = require('echarts/lib/echarts')
// 散点图
require('echarts/lib/chart/scatter')
// 散点图放大
require('echarts/lib/chart/effectScatter')
// 地图
require('echarts/lib/chart/map')
// 图例
require('echarts/lib/component/legend')
// 提示框
require('echarts/lib/component/tooltip')
// 地图geo
require('echarts/lib/component/geo')
2.引入中国地图JS文件,会自动注册地图;也可以通过axios方式引入json文件,需要手动注册echarts.registerMap('china', chinaJson.data)。
// 中国地图JS文件
require('echarts/map/js/china')
3.准备一个有固定宽高的DOM容器并在mounted里面初始化一个echarts实例。
DOM容器
<template>
<div id="china-map"></div>
</template>
初始化echarts实例
let chinaMap = echarts.init(document.getElementById('china-map'))
4.设置初始化的空白地图,这里需要设置很多echarts参数,参考ECharts配置项手册。
chinaMap.setOption({
backgroundColor: '#272D3A',
// 标题
title: {
text: '中国地图闪闪发光',
left: 'center',
textStyle: {
color: '#fff'
}
},
// 地图上圆点的提示
tooltip: {
trigger: 'item',
formatter: function (params) {
return params.name + ' : ' + params.value[2]
}
},
// 图例按钮 点击可选择哪些不显示
legend: {
orient: 'vertical',
left: 'left',
top: 'bottom',
data: ['地区热度', 'top5'],
textStyle: {
color: '#fff'
}
},
// 地理坐标系组件
geo: {
map: 'china',
label: {
// true会显示城市名
emphasis: {
show: false
}
},
itemStyle: {
// 地图背景色
normal: {
areaColor: '#465471',
borderColor: '#282F3C'
},
// 悬浮时
emphasis: {
areaColor: '#8796B4'
}
}
},
// 系列列表
series: [
{
name: '地区热度',
// 表的类型 这里是散点
type: 'scatter',
// 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
coordinateSystem: 'geo',
data: [],
// 标记的大小
symbolSize: 12,
// 鼠标悬浮的时候在圆点上显示数值
label: {
normal: {
show: false
},
emphasis: {
show: false
}
},
itemStyle: {
normal: {
color: '#ddb926'
},
// 鼠标悬浮的时候圆点样式变化
emphasis: {
borderColor: '#fff',
borderWidth: 1
}
}
},
{
name: 'top5',
// 表的类型 这里是散点
type: 'effectScatter',
// 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
coordinateSystem: 'geo',
data: [],
// 标记的大小
symbolSize: 12,
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
normal: {
show: false
}
},
itemStyle: {
normal: {
color: '#f4e925',
shadowBlur: 10,
shadowColor: '#333'
}
},
zlevel: 1
}
]
})
四. 配置Vuex管理和分发数据
1.在ChinaMap.js中引入vuex和axios。
import axios from 'axios'
2.设置必要的变量。
const state = {
geoCoordMap: {'香港特别行政区': [114.08, 22.2], '澳门特别行政区': [113.33, 22.13], '台北': [121.5, 25.03]/*等等*/},
// 发光的城市
showCityNumber: 5,
showCount: 0,
// 是否需要loading
isLoading: true
}
3.在actions中抓取后台数据并更新地图。
const actions = {
fetchHeatChinaRealData ({state, commit}, chartsObj) {
axios.get('static/data/heatChinaRealData.json')
.then(
(res) => {
let data = res.data
let paleData = ((state, data) => {
let arr = []
let len = data.length
while (len--) {
let geoCoord = state.geoCoordMap[data[len].name]
if (geoCoord) {
arr.push({
name: data[len].name,
value: geoCoord.concat(data[len].value)
})
}
}
return arr
})(state, data)
let lightData = paleData.sort((a, b) => {
return b.value - a.value
}).slice(0, state.showCityNumber)
chartsObj.setOption({
series: [
{
name: '地区热度',
data: paleData
},
{
name: 'top5',
data: lightData
}
]
})
}
)
}
}
此时npm run dev已经可以看到中国地图上闪闪的黄色小点点。 若想改变她使动态展示,可以在index.vue中mounted下面加上:
chinaMap.showLoading(showLoadingDefault)
this.$store.commit('openLoading')
this.$store.dispatch('fetchHeatChinaRealData', chinaMap)
setInterval(() => {
this.$store.dispatch('fetchHeatChinaRealData', chinaMap)
}, 1000)
在ChinaMap.js中actions的mutations中fetchHeatChinaRealData修改:
let lightData = paleData.sort((a, b) => {
return b.value - a.value
}).slice(0 + state.showCount, state.showCityNumber + state.showCount)
if (state.isLoading) {
chartsObj.hideLoading()
commit('closeLoading')
}
五. 其它
1.别忘了在main.js里面引入Vuex。
import Vue from 'vue'
import Index from './components/index.vue'
import store from './store/index'
let ChinaMap = new Vue({
el: '#app',
store,
template: '<Index/>',
components: {Index}
})
Vue.use(ChinaMap)
2.案例代码
vue+vuex+axios+echarts画一个动态更新的中国地图
vue+vuex+axios+echarts画一个动态更新的中国地图的更多相关文章
- Vue中使用ECharts画散点图加均值线与阴影区域
[本文出自天外归云的博客园] 需求 1. Vue中使用ECharts画散点图 2. 在图中加入加均值线 3. 在图中标注出阴影区域 实现 实现这个需求,要明确两点: 1. 知道如何在vue中使用ech ...
- 使用echarts画一个类似组织结构图的图表
昨天,写了一篇关于圆环进度条的博客(请移步:Vue/React圆环进度条),已经烦不胜烦,今天又遇到了需要展示类似公司的组织结构图的功能需求,要冒了!!! 这种需求,自己用div+css也是可以实现的 ...
- vue中使用echarts画饼状图
echarts的中文文档地址:https://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20EC ...
- Vue3 + Echarts 5 绘制带有立体感流线中国地图,建议收藏
本文绘制的地图效果图如下: 一.Echarts 使用五部曲 1.下载并引入 echarts Echarts 已更新到了 5.0 版本,安装完记得检查下自己的版本是否是 5.0 . npm instal ...
- echarts 如何在世界地图中绘制中国地图
1.导入 world.china.js 这个js是将world.js 文件 以及china.js文件进行合并 (网上一些中国地图勾勒的身份曲线感觉很飘 所以自己加工了一下china.js中的数据, ...
- 在vue中使用Echarts画曲线图(异步加载数据)
现实的工作中, 数据不可能写死的,所有的数据都应该通过发送请求进行获取. 所以本项目的需求是请求服务器获得二维数组,并生成曲线图.曲线图的横纵坐标均从获得的数据中取得. Echarts官方文档: ht ...
- vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据
在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-se ...
- lucene.net的一个动态更新类
工作的需要,需要对于lucene.net索引即时的更新,毕竟lucene.net的索引重建的话比较慢,数据量大的时候建下要几天,所以就写个了缓冲类来解决即时的更新的问题,其实还是比较简单的. 大体上的 ...
- vue+vux-ui+axios+mock搭建一个简单vue框架
1.首先感谢同事 2.之前一直在做angularjs的项目,目前vue火热,所以自己搭建了一个的vue框架,在此作为记录 vue+vux-ui这里就不介绍了,有很多博客都写的很详细了. 下面简单记录下 ...
随机推荐
- 破解PostgresSQL登录的6种方法
第一种方式Hydra: Hydra通常是首选工具,它可以对50多种协议执行快速字典暴力攻击,包括telnet,postgres,http,https,smb服务和各种数据库等.现在需要选择一个字典 ...
- Mysql基本的一些查询操作
/*查询选修课程‘3-105’且成绩在60到80之间的所有记录.*/SELECT * FROM result WHERE CNO='3-105' AND GRADE > 60 AND GRADE ...
- python入门:求1-2+3-4+5...99的所有数的和
#!/usr/bin/env python # -*- coding:utf-8 -*- #求1-2+3-4+5...99的所有数的和 """ 给start赋值为1,su ...
- 《剑指offer》— JavaScript(22)从上往下打印二叉树
从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 借助两个辅助队列,一个用来存放结点,一个用来存放结点值: 先将根节点加入到队列中,然后遍历队列中的元素,遍历 ...
- noip2017考前整理(未完)
快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...
- golang json 编码解码
json 编码 package main import ( "encoding/json" "fmt" ) type Person struct { Name ...
- Chapter9(顺序容器) --C++Prime笔记
PS:删除元素的成员函数并不检查其参数.在删除元素之前,程序员必须确保它们是存在的. 1.迭代器的范围是[begin,end)左闭右开. 2.对构成迭代器的要求: ①它们指向同一个容器中的元素或者容器 ...
- Gogs安装配置(快速搭建版)转载
gogs官网 oschina gogs介绍 一句话描述: 一款极易搭建的自助 Git 服务. 环境 centos7:golang+mysqldb+git 安装配置环境 yum install mysq ...
- CSS--overflow和hover
一.Overflow overflow 属性规定当内容溢出元素框时发生的事情. 当插入的一张图片大小超过了元素本身大小,就会将元素撑大 <!DOCTYPE html> <html l ...
- Hadoop基础-MapReduce的工作原理第一弹
Hadoop基础-MapReduce的工作原理第一弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在本篇博客中,我们将深入学习Hadoop中的MapReduce工作机制,这些知识 ...