vue+vuex+axios+echarts画一个动态更新的中国地图的方法


Posted in Javascript onDecember 19, 2017

本文介绍了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.案例代码

GitHub

3.效果图

vue+vuex+axios+echarts画一个动态更新的中国地图的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery EasyUI 中文API Layout(Tabs)
Apr 27 Javascript
JavaScript中“基本类型”之争小结
Jan 03 Javascript
关于div自适应高度/左右高度自适应一致的js代码
Mar 22 Javascript
php利用curl获取远程图片实现方法
Oct 26 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
js实现产品缩略图效果
Mar 10 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
JavaScript基础之this详解
Jun 04 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 Javascript
vue 的 solt 子组件过滤过程解析
Sep 07 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
常用的9个JavaScript图表库详解
Dec 19 #Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 #Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 #Javascript
Angular2实现组件交互的方法分析
Dec 19 #Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 #Javascript
jquery自定义显示消息数量
Dec 19 #jQuery
基于Vue开发数字输入框组件
Dec 19 #Javascript
You might like
PHP 编写大型网站问题集
2010/05/07 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
介绍Python中的__future__模块
2015/04/27 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
django 简单实现登录验证给你
2019/11/06 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
优秀应届毕业生推荐信
2014/02/18 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
对教师的评语
2014/04/28 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python