Echarts 自适应报表
@
概述
在单个echarts报表实例中使用resize来进行自适应,多个报表就不能这么使用了。
代码
$_resizeHandler() {
return debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)()
}
完整代码
此代码直接使用mixin混入即可,封装了报表自适应和报表销毁功能,在每一个报表组件中引入就好。
import { debounce } from '@/utils/common'
export default {
data() {
return {
$_sidebarElm: null,
chart: null,
dataEmpty: false,
}
},
watch: {
data(newVal) {
if (!this.chart) {
this.$_init();
} else {
this.setData(newVal);
}
},
},
mounted() {
this.$nextTick(() => {
this.$_init();
});
this.$_initResizeEvent()
},
beforeDestroy() {
this.$_disposeChart()
this.$_destroyResizeEvent()
},
activated() {
this.$_initResizeEvent()
},
deactivated() {
this.$_destroyResizeEvent()
},
methods: {
/**
* 初始化数据
*/
$_init() {
if (this.data && this.data.length === 0) {
this.dataEmpty = true;
} else {
this.dataEmpty = false;
this.initChart();
this.setData(this.data);
}
},
$_resizeHandler() {
return debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)()
},
$_initResizeEvent() {
window.addEventListener('resize', this.$_resizeHandler)
},
$_destroyResizeEvent() {
window.removeEventListener('resize', this.$_resizeHandler)
},
// 销毁报表
$_disposeChart() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
}
}
}
debounce函数
/**
* 防抖函数
* @param {Funciton} fn 函数
* @param {Number} wait 等待时间
* @param {immediate} Boolearn 是否立即执行
*/
export function debounce(fn, wait, immediate) {
let timer
return function() {
if (timer) clearTimeout(timer)
if (immediate) {
// 如果已经执行过,不再执行
var callNow = !timer
timer = setTimeout(() => {
timer = null
}, wait)
if (callNow) {
fn.apply(this, arguments)
}
} else {
timer = setTimeout(() => {
fn.apply(this, arguments)
}, wait)
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)