ECharts在小程序中的基本应用

1. 前言

  • 最近项目里有个需求:显示收益折线图,要求smooth line 那种效果,点击切换不同数据源
  • 技术方案
    • 第一:想使用canvas去实现,但是发现canvas绘制曲线需要用到贝塞尔曲线,不知道smooth line 曲度怎么去计算,然后放弃这个方案....
    • 第二:想起来ECharts这个牛逼的JS库,正好看到了ECharts支持小程序了,心里想着:稳了!很稳!!

2. 参考

  • ECharts的官方文档
  1. 在微信小程序中使用 ECharts
  2. repo:echarts-for-weixin
  • ECharts配置的API文档
  1. ECharts配置项

3.效果图

earningsDay.png
earningsWeek.png

4.导入js库到项目中

  • 官方文档: 在微信小程序中使用 ECharts
  • 将repo中的 ec-canvas文件夹拷贝项目中,不需要担心超过2M,在编译的时候会将导入的JS库进行es5编译
  • 我在项目中将文件放在与page同层级的位置


    文件路径.png

5.具体使用

5.1 json文件
  • 在需要使用绘制图标的界面的json文件配置路径,路径一定要对,路径不对不会报错,只是无法渲染,所以出现空白页面一定要先看路径问题
{
    "navigationBarTitleText": "我的收益",
    "enablePullDownRefresh": false,
    "usingComponents": {
      "ec-canvas": "../../../ec-canvas/ec-canvas"
    }
}
路径一定要对.png

5.2 wxml文件
  • 我的UI层级是在图标上面放了个swiper组件方便实现数据源的点击切换
  • id & canvas-id这两个属性的命名可以自己修改
  • 我给整个图表组件设置了个背景图,因为我取消了ECharts的分割线,用了自己的图片来作为区分
  <view class="ecContainer" style="background-image:url('https://items-1255492638.cos.ap-guangzhou.myqcloud.com/805faf3070e04cb6992cf7f3fda23c4a.png'); background-size:cover">
    <ec-canvas id="mychart-dom-line" canvas-id="mychart-bar" ec="{{ec}}"></ec-canvas>
  </view>

5. 3 wxss文件
  • 这个样式真的仁者见仁,智者见智了,作为一个iOS开发,小程序css写的是很烂,欢迎指正
.ecContainer{
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: "#F8FAFC";
height: 310px;
width:100%;
margin: 0 auto;
}

ec-canvas {
width: 100%;
height: 310px;
background-color: "#F8FAFC"
}

5. 4 js文件
  • 导入文件
import *as echarts from "../../../ec-canvas/echarts" //echarts的js库的路径
var network = require("../../../utils/network.js")  //处理网络请求
var api = require("../../../utils/api.js")  //负责API的js
  • 配置echart的配置属性
    • 配置我在文档中看到是写在page函数之前,我理解相当于一个全局函数配置
    • 也可以使用lazyload , 使用到再加载,通过data中的ec属性配置加载方式
    • 使用到的相关配置只是冰山一角,很多的配置在文档中都有,很方便查询
//存放初始数据,因为初始化方法不能给page中data赋值,所以设置了个全局的数组存放数据
var dayArry = [0, 0, 0, 0, 0,0,0];
var chart;


function initChart(canvas, width, height) {

  chart = echarts.init(canvas, null, {
    width: width,
    height: height
  });

  canvas.setChart(chart);

//请求相关数据
  network.requestLoading(api.totalEarnings, "", "GET", '', function (res) {
    dayArry =  res.data.info.dayData
    var option = {

      // 为图表设置标题,项目中不需要,隐藏
      // title: {
      //   text: 'ECharts Demo'
      // },

      // 一般是在柱图和饼图中使用,
      // legend: {
      //     data: ['收益']
      // },

      // 小程序的tooltip并没有显示功能,只有一点缩放动画
      tooltip: {
        show: true,
        trigger: 'axis', //折线图trigger需要设置为axis
      },

     // x轴相关设置
        xAxis: {
        splitLine: { show: false },//去除网格线
        splitArea: { show: false },//保留网格区域
        data: xAxis,
        show: true,  //隐藏x轴,
        axisLine:{
          show:true,//是否显示轴线
          lineStyle:{
            color:"#777777",
            width:0 //x州的宽度
          }
        },
        axisTick:{
          show:false, //x轴的轴线是否显示
        }
      },

     // y轴相关设置
      yAxis: {
        splitLine: { show: false },//去除网格线
        type: 'value', 
        splitArea: { show: false },//保留网格区域
        show: false//隐藏y轴
      },

      series: [
        {
          name: '收益',
          type: 'line',   //设置为折线图,也可以设置bar pie 等等类型
          smooth: true, //设置为smooth line 
          data: dayArry, //数据源

          symbol: 'circle',     //设定为实心点
          symbolSize: 10,   //设定实心点的大小

          //折线拐点标志的样式
          itemStyle: {
            normal: {
              color: "#FF1F62",
              borderColor: "#F8FAFC",
              borderWidth: 3,
              shadowColor: "#FCDEE8",
              shadowOffsetY: 1
            }
          },

          //折线相关属性设置
          lineStyle: {
            color: '#FF1F62',
            width: 4
          },

          //设置数据点上方的提示label
          label: {
            show: true,
            position: 'top',
            distance: 10,

          //label  - formatter
            formatter: function (params) {
              let data = params.value
              let dataStr = "收益" + data + "元"
              return dataStr
            },
            backgroundColor: '#FFFFFF',
            textStyle: {
              color: '#FF1F62',
              fontSize: '11'
            },
            shadowOffsetY: 2,
            shadowColor: "#F8ECF3",
            borderColor: "#F8ECF3",
            borderWidth: 1,
          }

        },
      ]
    };

  //相关设置set方法调用
    chart.setOption(option);
  }, function () {
  })



  chart.on('click', (params) => {

  });

  return chart;
}
  • 将echarts设置为data的属性导入page中


    导入方法.png
  • OK!!!初始化设置已经设置完,效果是第一张效果图,但是点击数据源切换要怎么操作呢,继续切换数据源方法

  /**
   * 切换日期方法
   */
  clickData: function (e) {
    this.setData({
      selectedTitle: e.currentTarget.id 
    });

    //更新echart数据
   // chart为我设置的全局属性,方便拿到这个chart


   //可以打印下option,可以看到很多属性可以设置
    var option = chart.getOption();

    if (e.currentTarget.id == 1) {
      //因为是折线图,所以   option.series[0].data 数据源只有一个

      option.series[0].data = this.data.weekData
    } else if (e.currentTarget.id == 2) {
      option.series[0].data = this.data.monthData
    } else if (e.currentTarget.id == 3) {
      option.series[0].data = this.data.yearData
    } else if (e.currentTarget.id == 0) {
      option.series[0].data = this.data.dayData
    }

    //chart更新option设置,即可实现更新数据源,也可以做很多操作,切换颜色等等

    chart.setOption(option);    
  },

6.END

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

推荐阅读更多精彩内容