echarts的学习与实战大数据首页

ふわり from pixiv

关于echarts项目用到挺多,柱状图,折线图,进度图,指针图和饼图
echarts的配置项比较多,用起来比较繁琐和复杂,所以边写边看文档是必需的(吐槽)
实战时而比较推荐的是在echarts社区找一个与需求差不多的实例,再去修改其中的配置项,这样效率是最快的

echarts最近被apache收购了,换了一个官网,我们可以在这查看配置项
ECharts Gallery 是重中之重,里面有众多开发者的贡献的实例,能大幅提高开发的效率(重点!!!)
补充:Makeapie最近被墙了,现在找一些备用的网站
DataInsight isqqw PPChart 快速获取区域json
不好说哪一天需求给个地狱级图表的需求,我们束手无策的时候可以逛逛社区,可能会找到社区大神贡献过的类似的实例

大数据首页

项目做的大概是这种大数据首页的效果,为了方便维护,封装了vue组件

Echarts

<template>
<!-- :style="{width:width,height:height}" -->
  <div
    :id="id"
    class="base-echarts">
  </div>
</template>

<script>
/*
 *@description: 图标基础组件
 *@version V0.1.0
 *@API:
 *@ 参数
 *   id 组件标签的id
 *   option 图表配置
 *
 *@ 事件
 *
 *
*/
// 引入 ECharts 主模块
// const echarts = require('echarts/lib/echarts')
// // 引入柱状图
// require('echarts/lib/chart/bar')
// // 引入提示框和标题组件
// require('echarts/lib/component/tooltip')
// require('echarts/lib/component/title')

// require('echarts/lib/chart/pie')
import { debounce } from '@/utils/common.js'
import echarts from 'echarts'
export default {
  name: 'BaseEcharts',
  props: {
    id: {
      type: String,
      default: ''
    },
    option: {
      type: Object,
      default: function() {
        return {
          title: {
            text: 'ECharts 入门示例'
          },
          tooltip: {},
          xAxis: {
            data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
          },
          yAxis: {},
          series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }]
        }
      }
    },
    width: {
      type: String,
      default: 'auto'
    },
    height: {
      type: String,
      default: '500px'
    },
    mapJSON: {
      type: Object,
      default() {
        return {}
      }
    },
    isMap: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      baseCharts: null
    }
  },
  created() {
    this.reSizeECharts()
  },
  mounted() {
    if (this.isMap) {
      echarts.registerMap('GZ', this.mapJSON)
    }
    if (this.id === '') return
    // this.baseCharts = echarts.init(document.getElementById(this.id), {}, {
    //   width: this.width,
    //   height: this.height
    // })
    this.baseCharts = echarts.init(document.getElementById(this.id), {}, {
      width: this.width,
      height: this.height
    })
    // console.log(this.id, baseCharts)
    // console.log(this.option)
    // 添加echarts的配置文件:https://www.echartsjs.com/option.html#series-pie.legendHoverLink
    // 若是地图图表,注册地图
    this.baseCharts.setOption(this.option)
    this.reSizeECharts()
    // 防抖提升性能
    window.addEventListener('resize', debounce(this.reSizeECharts, 300))
    this.$once('hook:beforeDestory', () => {
      window.removeEventListener('resize', this.reSizeECharts)
    })
  },
  methods: {
    // 刷新echart
    reLoadOption(option) {
      this.baseCharts.setOption(option)
    },
    // 修改echart的尺寸
    reSizeECharts(width, height) {
      if (!this.baseCharts) return
      this.baseCharts.resize()
      // this.baseCharts.resize(
      //   {
      //     width: width,
      //     height: height
      //   }
      // )
    }
  }

}
</script>

<style lang="scss">
.base-echarts {

}
</style>

页面使用

思路是获取数据之后修改原有的配置项,然后在调用echarts的reLoadOption把心的配置项传进去更新

<template>
          <l-base-echarts
            echartsId="echartsData"
            ref="leftTopEchart"
            width="800px"
            height="330px"
            :option="echartsData"
          >
          </l-base-echarts>
</template>
<script>
// 引用定义好的配置项
import { echartsData }  from './DataConfig/index.js'
import { LBaseEcharts } from '@/components/index.js'
export default {
  name: 'DashBoard',
  props: {

  },
  components: {
    LBaseEcharts
  },
  data(){
    return{
      echartsData
    }
 },
 mounted(){
     const params = {
        param1:xxx,
        param2:bbb
      }
     this.getNetData(params)
  },
 methods:{
    // 更新图表的公共方法
    updataEchart(echarId, option) {
      // console.log('option=', option)
      if (this.$refs[echarId]) {
        // console.log(option)
        this.$refs[echarId].reLoadOption(option)
      }
    },
    // 模拟网络请求
    getNetData(){
      this.$store.dispatch('api/homeData', { ...params })
        .then((res)=>{
            if(res.code){
              this.upDateLeftTopEchart(res.data)
            } else {
              this.$message.error(res.msg)
            }
        })
    },
    // 更新echarts数据
    upDateLeftTopEchart(homeData = {}) {
      const option = this.echartsData
      // 修改具体的参数
      const pie = option.series[0]
      pie.data[0].value = 1
      this.updataEchart('leftTopEchart', option)
    }
}
</script>
胡桃

大数据首页

  1. 项目的分辨率控制,平时项目用的单位一般是px,而这种首页用的是rem或者vh,这里用的rem
  2. 页面布局比较复杂,一般页面图片会比较多,纵横交错,一些echarts会展示在部分图片上面,因此页面会划分层数来堆叠,项目纵向分了底层(展示地图),顶层(css定位),横向进一步用了左中右,上下布局(上部分显示标题,下部分展示主体)
  3. 项目的背景图片的大小问题,过大的图片可能会很占用网络,导致首屏加载速度变慢,这边的策略是将小图片通过webpack转成base64,减少网络请求次数,并且在webpack配置中做好切片,而大的图片经过压缩后放进cdn(如果是内网项目,直接当做静态资源不做cdn也无可厚非,局域网更注重稳定)
  4. 项目的背景图片放置问题,图片放置用的background,而background-size都是用100%覆盖
    background: url('~@/assets/dashboard/left-panel02.png') no-repeat;
    background-size: 100% 100%;
  5. 大数据首页不止是echarts的运用,css特效部分也有浓墨重彩的一笔,目前项目做的css特效有冒泡特效,光环特效,波纹特效,气球特效,动态光圈特效,浮动特效等等。

页面布局

骨架图

dom树结构
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容