VUE中Echarts的resize事件报错和移除windows的事件问题
作者:初入前端的小谢
这篇文章主要介绍了VUE中Echarts的resize事件报错和移除windows的事件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Echarts的resize事件报错和移除windows的事件
Echarts的resize事件报错
原因:echart的api只有在实例化之后才能调用,如果直接调用肯定会导致报错
解决方式:在调用resize的之前判断是否已经实例化
this.barchart = this.$echarts.init(dom) // 实例化Echarts对象
/****************/
if(this.barchart) { // 方法一
this.syqchart.resize()
}
/****************/
this.syqchart && this.syqchart.resize() // 方法二
/****************/移除windows的resize事件
一般在使用echart图表时都会去监听窗口大小的变化,以之来实现图表的重新绘制。
但是当添加了window事件之后,离开了当前页面,也依然会继续监听并且执行事件的回调函数,这样就会导致浏览器CPU的占用,页面卡顿。
解决方式:
resizeHandler(){ // methods中定义事件处理函数(必须将处理函数提取出来,这样在移除的时候就能通过指针找到该处理函数)
this.barchart && this.barchart.resize()
this.linechart && this.linechart.resize()
}
mounted() { // 页面加载注册事件
window.addEventListener('resize', this.resizeHandler, false)
}
beforeDestroy() { // 页面离开移除事件
window.removeEventListener('resize', this.resizeHandler)
}ECharts的resize失效原因以及使用方法
很多朋友在开发的过程中要把ECharts图标做成自适应浏览器宽高的效果。
于是去翻看ECharts官网发现了resize方法,结果用了之后发现没用,而且根本不知道什么原因。
解决办法
不能给ECharts的容器设置固定的宽高。
- 宽度要写百分比
- 高度要写vh
- 然后再搭配resize方法才可以实现根据浏览器大小而改变大小的功能
示例代码
let ECharts = echarts.init(document.getElementById('wrapBox'));
//ECharts的配置项和数据
let option = {
title: {
text: 'demo'
},
tooltip: {},
legend: {
data: ['dataSource']
},
xAxis: {
data: ['aa', 'bb', 'cc']
},
yAxis: {},
series: [{
name: 'dataSource',
type: 'bar',
data: [2, 5, 6],
}]
};
//配置图表数据及配置项
ECharts.setOption(option);
//根据浏览器大小改变大小
window.onresize = () => {
ECarts.resize();
//如果有多个表变动在下方依次写下去就可以了
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
