详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)


Posted in Javascript onMarch 21, 2017

数据可视化

将数据通过图表的形式展现出来将大大的提升可读性和阅读效率

本例包含柱状图、折线图、散点图、热力图、复杂柱状图、预览面板等

技术栈

  1. vue2.x
  2. vuex 存储公共变量,如色值等
  3. vue-router 路由
  4. element-ui 饿了么基于vue2开发组件库,本例使用了其中的datePicker
  5. echarts 一款丰富的图表库
  6. webpack、ES6、Babel、Stylus...

项目截图

详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)

开发

组件化

本项目完全采用组件化的思想进行开发。使用vue-router作为路由,每个页面都是一个组件,每个组件里又包含多个组件。可以看到,多种图表的标题和日期筛选等都是类似的格式,所以这两个都分别做成了组件。

除此之外,在筛选产品的时候用到的checkbox也被我写成了组件,有需要的朋友也可以剥离出去单独使用(不过写的比较粗糙)

每个图表都是一个单独的组件,也可以单独的剥离出去使用。

柱状图

本项目包含多种图表,这里挑“柱状图”说一说,其他的图标实现方式类似。

<template>
<div class="multipleColumn">
 <v-header :name="name" :legendArr="legendArr" :myChart="myChart"></v-header>
 <v-filter :myChart="myChart" v-if="myChart._dom"></v-filter>
 <div class="main"></div>
</div>
</template>

页面HTML可以看到,一个完整的图标是由三个部分组成:

v-header

头组件,存放标题以及不同类型的筛选等

  1. name 图表的标题
  2. legendArr 图表所包含的多种类型
  3. myChart 当前图表对象

v-filter

筛选组件,日期的筛选以及不同产品的筛选

  1. myChart 当前图表对象

v-if="myChart._dom"表示在当前图表dom元素渲染完成之后再渲染filter组件

main

图表的主体文件

需要注意的是:main必须要指定宽高,否则echarts无法渲染dom

初始化

初始化需要在vue的mounted()方法里执行,因为这里能保证当前的页面元素都已经被加载完成。

mounted() {
 // 基于准备好的dom,初始化echarts实例
 this.myChart = echarts.init(document.querySelector('.multipleColumn .main'))
 this.myChart.setOption(this.options) //this.options为echarts的配置,详情可去我的gitHub查看
}

如果要在created()方法里执行,则需要另外加上

this.$nextTick(() => {
 this._init()
})

DashBoard

dashboard是一个所有图表的预览,并且有一个点击切换的动画效果,这里大概讲解一个实现方式。

html

<template lang="html">
 <div class="dashboard">
  <div class="flex-container column">
    <div class="item one" @click="clickChart('1')" style="transform: translate(-22.4%,-33.5%) scale(0.33)">
     <multipleColumn></multipleColumn>
    </div>
    <div class="item two" @click="clickChart('2')" style="transform: translate(-22.4%,0.5%) scale(0.33)">
     <column></column>
    </div>
    <div class="item three" @click="clickChart('3')" style="transform: translate(-22.4%,34.5%) scale(0.33)">
     <v-line></v-line>
    </div>
    <div class="item four active" @click="clickChart('4')" style="transform: translate(43.7%, 0) scale(1)">
     <point></point>
    </div>
  </div>
 </div>
</template>

可以看到,这里是设置了四张图表的Wrapper,每个Wrapper里面装一个图表组件。通过动态的改变style样式来切换。

整体的思想为:

  1. 使用百分比布局,这样才能在不能大小的屏幕做到自适应
  2. 确定图表显示比例,长宽比
  3. 只做一个transform变换,这样才能提高性能

性能

关于性能方面,这里多说一句:

相信大家都看过在线演示的demo了,不同图表间的切换不仅有位置的变换,还有大小的变换。那么大小的变换大家都知道是用transform的scale变换,但是位置的变换呢,使用left、top?

很显然这样是不对的,但是这样确实也能实现效果,但是会非常的消耗性能。一个CSS属性的变化就相当于一个线程,那么如果使用了left、top以及transform的话就是三个线程同时开启,那你的电脑温度将会很快飙升的

正确的解决方案还是继续使用transform,使用它的 translate,如:

transform: translate(-22.4%,0) scale(0.33)

下载地址:DataVisualization_3water.rar

结语

这个项目还是挺实用的一个项目,最大程度的运用了vue的组件化思想。

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

Javascript 相关文章推荐
javascript sudoku 数独智力游戏生成代码
Mar 27 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
Jul 29 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
JQuery实现鼠标滚轮滑动到页面节点
Jul 28 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
Apr 01 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
javascript实现数字时钟效果
Feb 06 Javascript
node安装--linux下的快速安装教程
Mar 21 #Javascript
Vue 单文件中的数据传递示例
Mar 21 #Javascript
js实现颜色阶梯渐变效果(Gradient算法)
Mar 21 #Javascript
详解Vue 实例中的生命周期钩子
Mar 21 #Javascript
十大热门的JavaScript框架和库
Mar 21 #Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 #Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 #Javascript
You might like
PHP 身份验证方面的函数
2009/10/11 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
pymysql模块使用简介与示例
2020/11/17 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
电工技术比武方案
2014/05/11 职场文书
购房意向书
2014/08/30 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
Python实现Hash算法
2022/03/18 Python