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(); //如果有多个表变动在下方依次写下去就可以了 }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。