微信小程序实现echarts并兼容IOS

示例简介

本文介绍使用ec-canvas实现小程序图表功能,支持切换更新数据并在IOS顺畅使用。

Tips:本文只介绍柱形图,其它图形类似,具体可查看GitHub上的ecomfe/echarts-for-weixin项目。

实现过程

1、文件index.wxml和index.wxss代码如下,这一块比较简单,可自行查看,不做过多分析;

月份统计 {{choossArr[chooseIndex].value}} .container { height: 100%; display: flex; flex-direction: column;}.item-head { display: flex; padding: 40rpx 30rpx 20rpx;}.item-head .tit { font-size: 30rpx; margin: 6rpx 14rpx 0 0;}.item-head .picker-box { display: flex; width: 196rpx; height: 50rpx; font-size: 26rpx; line-height: 50rpx; border-radius: 6rpx; border: 2rpx solid #e6e6e6;}.item-head .picker-box .picker { display: inline-block; flex: 0.7; width: 140rpx; text-align: left; margin-left: 20rpx; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}.item-head .picker-box image { flex: 0.3; width: 12rpx; height: 8rpx; margin-top: -34rpx; vertical-align: middle;}.item-head .picker-box.ios image { margin-top: -10rpx;}.hide { display: none !important;}.echart-img { width: 100%; height: 100%;}.echart-heig { width: 100%; height: 1020rpx;}

2、文件index.js存放所有功能的逻辑代码,代码实现如下:

1)函数chooseChange用于获取切换数据后的月份;

2)函数getFinishCount用来根据月份判断使用的数据;为了方便使用简单的数据切换,项目情况下,一般都是调用接口获取数据;有个特别要注意的,就是把echartImgSrc的值清空,不然没办法更新数据;

3)函数initEcharts是示例的核心,数据结构可自行查看官网,更新数据使用了chart.setOption(option);但这里有个比较特别的代码,就是先使用canvasToTempFilePath把指定区域生成图片,然后赋值echartImgSrc来重新渲染页面,因为直接用ec-canvas渲染,在IOS滑动会很卡。

import * as echarts from ‘../../ec-canvas/echarts’;const app = getApp();Page({ data: { villageArr: [], villageArr1: [{ value1: 90, value2: 78, name: ‘aaa’ }, { value1: 145, value2: 120, name: ‘bbb’ }, { value1: 98, value2: 87, name: ‘ccc’ }, { value1: 126, value2: 102, name: ‘ddd’ }, { value1: 90, value2: 90, name: ‘eee’ }, { value1: 108, value2: 100, name: ‘fff’ }, { value1: 134, value2: 120, name: ‘ggg’ } ], villageArr2: [{ value1: 50, value2: 45, name: ‘aaa’ }, { value1: 40, value2: 36, name: ‘bbb’ }, { value1: 70, value2: 67, name: ‘ccc’ }, { value1: 80, value2: 54, name: ‘ddd’ }, { value1: 77, value2: 55, name: ‘eee’ }, { value1: 66, value2: 57, name: ‘fff’ }, { value1: 80, value2: 50, name: ‘ggg’ } ], ec: {}, echartImgSrc: ”, // canvas在ios下滑动问题,目前只能将echarts图表渲染完成后再生成为图片展示。 chooseIndex: 0, // 选中的下标 choossArr: [{ value: ‘1月’, id: 1 }, { value: ‘2月’, id: 2 } ] }, // 切换不同数据 getFinishCount: function (month) { let self = this; if (month === 1) { this.setData({ villageArr: this.data.villageArr1, echartImgSrc: ” }); } else { this.setData({ villageArr: this.data.villageArr2, echartImgSrc: ” }); } self.initEcharts(); }, // 数据渲染 initEcharts: function (canvas, width, height) { let that = this; this.selectComponent(‘#mychart’).init((canvas, width, height) => { // 初始化图表 const chart = echarts.init(canvas, null, { width: width, height: height }); let villageArr = that.data.villageArr; let villageArrName = []; let villageArrValue1 = []; let villageArrValue2 = []; villageArr.map(function (item, index) { villageArrName.push({ value: item.name, id: index }); villageArrValue1.push({ value: item.value1 }); villageArrValue2.push({ value: item.value2 }); }) this.setData({ villageArr: villageArr }) let option = { color: [“#58a7f8”, “#63e669”], legend: { data: [‘上报量’, ‘完成量’], top: 0, left: 10, icon: ’roundRect’, itemWidth: 13, itemHeight: 13, itemGap: 20, }, grid: { left: 15, right: 25, bottom: 0, top: 35, containLabel: true }, xAxis: { type: ‘value’, axisTick: { show: false }, axisLine: { show: false, }, splitLine: { lineStyle: { color: ‘#e6e6e6’ } }, axisLabel: { textStyle: { color: ‘#6a737d’ } } }, yAxis: { type: ‘category’, axisTick: { show: false }, axisLine: { show: false, }, axisLabel: { textStyle: { color: ‘#6a737d’, fontSize: 11, align: ‘right’, }, formatter: function (value, index) { if (value.length > 6) return value.slice(0, 6) + ‘…’; else return value; } }, data: villageArrName }, series: [{ name: ‘上报量’, type: ‘bar’, barWidth: 12, barGap: ‘-100%’, data: villageArrValue1 }, { name: ‘完成量’, type: ‘bar’, barWidth: 12, data: villageArrValue2 } ] }; chart.on(‘finished’, () => { that.selectComponent(‘#mychart’).canvasToTempFilePath({ success: res => { that.setData({ echartImgSrc: res.tempFilePath }) wx.hideLoading(); }, fail: res => console.log(‘转换图片失败’, res) }); }) chart.setOption(option); return chart; }); }, // 选项改变触发 chooseChange: function (e) { wx.showLoading({ title: ‘加载中’, mask: true }); this.setData({ chooseIndex: e.detail.value }) let month = this.data.choossArr[e.detail.value].id; this.getFinishCount(month); }, // 加载页面 onLoad: function () { wx.showLoading({ title: ‘加载中’, mask: true }); // 默认第一月数据 this.getFinishCount(1); }});

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年7月11日 18:42
下一篇 2022年7月11日 18:42

相关推荐

  • 网通复古(网通复古传奇)

    本文主要讲的是网通复古,以及和网通复古传奇相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 推荐个网通传奇私服 要中变的 我是网通 要个网通的 不卡的 老传奇传统战…

    2022年11月27日
  • 存储过程语法(sql server存储过程语法)

    今天小编给各位分享存储过程语法的知识,其中也会对sql server存储过程语法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! oracle存储过程基本语法…

    2022年11月26日
  • 全民K歌升级新版本7.0之后,有哪些隐藏功能?

    作者:高百烈来源:知乎 这个功能,旧版并没有,要升级到全新的全民K歌7.0版本才能发现。 作为朋友圈当代K歌之王,我费了不少功夫才抢到内测版本。有一说一,全民K歌的路子真的很野,新…

    2022年11月25日
  • 拼多多百亿补贴预售一般多久发货(拼多多百亿补贴预售)

    拼多多里面有很多优惠活动,其中百亿补贴活动非常火爆,一些里面的东西价格比别的平台便宜,质量也有保障,还有预售的活动,那么拼多多百亿补贴预售一般多久发货?下面小编为大家带来拼多多百亿…

    2022年11月25日
  • 上手Reno8 Pro体验跨屏互联 实在太方便!

    11月已经来到了月底,在手机品牌又要推出新一年度的新品手机之前,我们来点评一下今年令人惊喜的产品。如OPPO的Reno8 Pro系列,该系列搭载双芯影像配置获得了很多消费者的认可。…

    2022年11月25日
  • 什么是推广cpa一篇文章带你看懂CPA推广渠道

    CPA渠道 CPA指的是按照指定的行为结算,可以是搜索,可以是注册,可以是激活,可以是搜索下载激活,可以是绑卡,实名认证,可以是付费,可以是浏览等等。甲乙双方可以根据自己的情况来定…

    2022年11月25日
  • 百度关键词快速排名的4大原理解析(百度怎么刷关键词)

    近期百度公告惊雷算法2.0,升级之快还是第一次吧,看来百度对于刷点击行为是零容忍了。之前尹华峰SEO技术博客介绍过一篇如何使用刷点击工具,其实市面上有很多这类SEO快速排名的软件,…

    2022年11月25日
  • 抖音直播带货有哪些方法技巧(抖音直播带货有哪些痛点)

    如今抖音这个短视频的变现能力越来越突显了,尤其是在平台上开通直播,更具有超强的带货属性,已经有越来越多的普通人加入到其中了。不过直播带货虽然很火,但是也不是每个人都能做好的,那么在…

    2022年11月24日
  • 今天出入济南最新通知(出入济南政策最新消息今天)

    近日济南疫情感染人数也在不断增加,划分的高风险区也是越来越多了。据最新统计,截止2022年11月24日11时,济南共有低风险地区12处,高风险地区338处。很多朋友都担心现在济南无…

    2022年11月24日
  • Steam秋季特卖开启 为Steam大奖提名游戏

    Steam秋季特卖开启 为Steam大奖提名游戏 Steam秋季特卖活动现已正式开启,时间从11月23日持续到11月30日(北京时间),新老游戏均有不错的折扣,感兴趣的玩家可以前往…

    2022年11月24日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息