一、引入加载使用
1.下载官方库到本地
官网地址 GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本
将官网代码下载到本地,并进行解压,可以运行一下查看示例代码
将图示中的文件夹复制粘贴到小程序相应位置,建议放在components文件夹中
2.引入echarts组件
json文件,路径要与文件的位置保持一致
{
"usingComponents": {
"ec-canvas":"../../components/ec-canvas/ec-canvas"
}
}
wxml文件,给ec-canvas一个父容器,并给组件两个对应的id
<view class="evabar">
<ec-canvas id="evabar" canvas-id="evabar" ec="{{evabarEc}}"></ec-canvas>
</view>
wxss文件,给父容器一个固定宽高,并给ec-canvas宽高都设置百分百
.evabar {
width: 100%;
height: 220px;
}
ec-canvas {
width: 100%;
height: 100%;
}
js文件,引入相应位置的 echarts.js 文件,data中添加渲染需要的对应数据,获取完动态数据后加载innitFn方法
import * as echarts from "../../components/ec-canvas/echarts"
Page({
data: {
evabarEc: {
disableTouch: true,
lazyLoad: true, // 延迟加载
// 不需要延迟加载时,只使用下面onInit进行渲染即可
// onInit: (canvas: any, width: any, height: any, dpr: any) => {
// const chart = echarts.init(canvas, null, {
// width: width,
// height: height,
// devicePixelRatio: dpr // new
// })
// var option = {
// ...
// };
// chart.setOption(option);
// return chart
// }
},
},
onReady() {
// 获取组件
this.ecComponent = this.selectComponent('#evabar');
},
/** 获取数据后渲染图表 */
initFn() {
// 获取数据后
this.ecComponent.init((canvas: any, width: any, height: any, dpr: any) => {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // new
});
var option = {
...
};
chart.setOption(option);
return chart
})
}
})
3.以上方法可以基本实现动态数据渲染
因为 echarts 是通过 canvas 绘图实现 ,canvas作为微信小程序的原生组件,层级较高且无法通过 zIndex 进行更改,所以会出现页面滚动,而图表在屏幕固定位置占位影响页面效果的情况,下面对代码进行更改,解决该问题
二、实现页面滚动时,图表随之滚动
1.方法一(win、android)
在组件中添加 force-use-old-canvas="true" 属性,这个方法可以解决 charts 在win和Android的不滚动问题,但是 ios系统 中的问题得不到解决,该方法属于强制使用旧canvas,2.9.0版本以上就不推荐使用该方法
<ec-canvas id="evabar" canvas-id="evabar" ec="{{evabarEc}}" force-use-old-canvas="true"></ec-canvas>
2.方法二(win、android、ios)
将 cahrt 转换成图片,data中添加变量用来存储图片地址 ,并在 initFn 中添加以下代码
data:{
...,
evabarEc: { disableTouch: true, lazyLoad: true },
evabarImg:''
}
...
// initFn中
var option = {...};
// =================================== 添加以下代码
chart.on('finished', () => {
this.evabarEcComponent.canvasToTempFilePath({
success: (res: any) => {
this.setData({
evabarImg: res.tempFilePath
})
},
fail: (res: any) => console.log('转换图片失败', res)
});
})
// ======================================= 结束
chart.setOption(option);
return chart
wxml文件,这里如果使用 wx:if 对图表进行显示隐藏,在下一次图表更新时会报错(找不到对应的node节点),使用 hidden 减少了页面的重新渲染,且不会出现节点销毁问题
<view class="evabar" hidden="{{evabarImg!=''}}">
<ec-canvas id="evabar" canvas-id="evabar" ec="{{evabarEc}}"></ec-canvas>
</view>
<view class="evabar" hidden="{{evabarImg==''}}">
<image src="{{evabarImg}}" class="image" mode=""/>
</view>
三、引入对应的图表,减少引入量,提高性能
Apache ECharts echarts官网地址
在 echarts 的 github 中点开 ec-canvas 文件夹,查看当前下载的版本
到官网中找到下载,在线定制
选择与代码同版本的,然后在下面勾选需要的图表,页面最后进行下载,会得到一个 echarts.min.js 文件
把项目的 ec-canvas 文件夹中的 echarts.js 删除,将 echarts.min.js 复制到文件夹中文章来源:https://www.toymoban.com/news/detail-848919.html
将文件夹中的 ec-canvas.js 和 其它页面 引入的 echarts.js 更改成 echarts.min.js 文章来源地址https://www.toymoban.com/news/detail-848919.html
到了这里,关于微信小程序使用echarts动态加载数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!