微信小程序使用echarts动态加载数据(页面滚动、ios)

打印 上一主题 下一主题

主题 793|帖子 793|积分 2379

一、引入加载使用

1.下载官方库到当地

官网地址 GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本 
将官网代码下载到当地,并进行解压,可以运行一下查看示例代码

将图示中的文件夹复制粘贴到小程序相应位置,发起放在components文件夹中 

 2.引入echarts组件

json文件,路径要与文件的位置保持同等
  1. {
  2.   "usingComponents": {
  3.     "ec-canvas":"../../components/ec-canvas/ec-canvas"
  4.   }
  5. }
复制代码
 wxml文件,给ec-canvas一个父容器,并给组件两个对应的id
  1. <view class="evabar">
  2.         <ec-canvas id="evabar" canvas-id="evabar" ec="{{evabarEc}}"></ec-canvas>
  3. </view>
复制代码
wxss文件,给父容器一个固定宽高,并给ec-canvas宽高都设置百分百
  1.     .evabar {
  2.         width: 100%;
  3.         height: 220px;
  4.     }
  5.     ec-canvas {
  6.         width: 100%;
  7.         height: 100%;
  8.     }
复制代码
js文件,引入相应位置的 echarts.js 文件,data中添加渲染必要的对应数据,获取完动态数据后加载innitFn方法
  1. import * as echarts from "../../components/ec-canvas/echarts"
  2. Page({
  3.   data: {
  4.     evabarEc: {
  5.         disableTouch: true,
  6.         lazyLoad: true, // 延迟加载
  7.         // 不需要延迟加载时,只使用下面onInit进行渲染即可
  8.         // onInit: (canvas: any, width: any, height: any, dpr: any) => {
  9.         //   const chart = echarts.init(canvas, null, {
  10.         //     width: width,
  11.         //     height: height,
  12.         //     devicePixelRatio: dpr // new
  13.         //   })        
  14.         //   var option = {
  15.         //     ...
  16.         //   };
  17.         //   chart.setOption(option);
  18.         //   return chart
  19.         // }
  20.     },
  21.   },
  22.   onReady() {
  23.     // 获取组件
  24.     this.ecComponent = this.selectComponent('#evabar');
  25.   },
  26.    /** 获取数据后渲染图表 */
  27.   initFn() {
  28.       // 获取数据后
  29.       this.ecComponent.init((canvas: any, width: any, height: any, dpr: any) => {
  30.         const chart = echarts.init(canvas, null, {
  31.           width: width,
  32.           height: height,
  33.           devicePixelRatio: dpr // new
  34.         });
  35.         var option = {
  36.             ...
  37.         };
  38.         chart.setOption(option);
  39.         return chart
  40.       })
  41.   }
  42. })
复制代码
3.以上方法可以根本实现动态数据渲染

因为 echarts 是通过 canvas 画图实现 ,canvas作为微信小程序的原生组件,层级较高且无法通过 zIndex 进行更改,所以会出现页面滚动,而图表在屏幕固定位置占位影响页面效果的情况,下面对代码进行更改,办理该问题
 二、实现页面滚动时,图表随之滚动

1.方法一(小程序模仿器、android)

 在组件中添加 force-use-old-canvas="true" 属性,这个方法可以办理 charts 在win和Android的不滚动问题,但是 ios系统 中的问题得不到办理,该方法属于逼迫使用旧canvas,2.9.0版本以上就不推荐使用该方法
  1. <ec-canvas id="evabar" canvas-id="evabar" ec="{{evabarEc}}" force-use-old-canvas="true"></ec-canvas>
复制代码
2.方法二(小程序模仿器、android、ios)

将 cahrt 转换成图片,data中添加变量用来存储图片地址 ,并在 initFn 中添加以下代码
  1. data:{
  2.     ...,
  3.     evabarEc: { disableTouch: true, lazyLoad: true },
  4.     evabarImg:''
  5. }
  6. ...
  7.         // initFn中
  8.         var option = {...};
  9.         
  10.         // =================================== 添加以下代码
  11.         chart.on('finished', () => {
  12.           this.evabarEcComponent.canvasToTempFilePath({
  13.             success: (res: any) => {
  14.               this.setData({
  15.                 evabarImg: res.tempFilePath
  16.               })
  17.             },
  18.             fail: (res: any) => console.log('转换图片失败', res)
  19.           });
  20.         })
  21.         // ======================================= 结束
  22.         chart.setOption(option);
  23.         return chart
复制代码
 wxml文件,这里假如使用 wx:if 对图表进行体现隐蔽,在下一次图表更新时会报错(找不到对应的node节点),使用 hidden 减少了页面的重新渲染,且不会出现节点烧毁问题
  1.                                 <view class="evabar" hidden="{{evabarImg!=''}}">
  2.                                         <ec-canvas id="evabar" canvas-id="evabar" ec="{{evabarEc}}"></ec-canvas>
  3.                                 </view>
  4.                                 <view class="evabar" hidden="{{evabarImg==''}}">
  5.                                         <image src="{{evabarImg}}" class="image" mode=""/>
  6.                                 </view>
复制代码
 三、引入对应的图表,减少引入量,提高性能

  Apache ECharts echarts官网地址
在 echarts 的 github 中点开 ec-canvas 文件夹,查看当前下载的版本

到官网中找到下载,在线定制


选择与代码同版本的,然后在下面勾选必要的图表,页面最后进行下载,会得到一个  echarts.min.js 文件
把项目的 ec-canvas 文件夹中的 echarts.js 删除,将 echarts.min.js 复制到文件夹中
将文件夹中的 ec-canvas.js 和 其它页面 引入的 echarts.js 更改成 echarts.min.js 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表