Vue项目中Echarts自适应整理(图表自适应resize失效等及文字大小适配)

文章介绍了如何使echarts图表在窗口大小改变时自动调整尺寸,包括单个图表和多个图表的处理方法,以及解决缩小无效的问题。同时,提出了字体自适应的解决方案,封装了一个根据屏幕宽度调整字体大小的函数,并在窗口resize时更新图表的option以实现文字的自适应效果。
摘要由CSDN通过智能技术生成

目录

  • echarts图表大小resize自适应
    • 一个图表
    • 多个图表
    • 放大有效,但缩小无效
  • echarts图表文字自适应
    • 封装字体自适应函数
    • 图表大小自适应时,option重新赋值
  • 实现效果

内容

1. echarts图表大小resize自适应

1.1 一个图表
const chartRef = ref();
const myChart = ref();

myChart.value = markRaw(echarts.init(chartRef.value));

window.onresize = function(){
	myChart.value.resize();
}
1.2 多个图表

onresize不适用,会出现只有最后一个图表实现resize自适应的情况。应使用addEventListener进行监听。

window.addEventListener("resize", () => {
    myChart.value && myChart.value.resize();
    initOption();
});
1.3 放大有效,但缩小无效

图表元素本身及父元素(甚至祖先元素)均使用了flex: 1,导致图表自适应大小出现问题,在父元素定义一下min-width即可。例如,

.chart_zone {
	display: flex;
	.item {
		flex: 1;
		min-width: 100px; // 此为解决办法
		.chart_desc {
			...
		}
		.chart_content {
			flex: 1;
		}
	} 
}

2. echarts图表文字自适应

如果只对图表大小进行自适应,而文字大小不进行自适应,则呈现的样式会不美观。

2.1 封装字体自适应函数

根据屏幕宽度调整字体大小

export function myEchartsFontSize(value, n) {
  let screenWidth = document.body.clientWidth;
  const result = value * (screenWidth / 1920) * n;
  return result;
}
2.2 图表大小自适应时,option重新赋值
const initOption = () => {
	let option = {...
		fontSize: myEchartsFontSize(22, 1.2);
	...};
     option && myChart.value.setOption(option);             
}

window.addEventListener("resize", () => {
    myChart.value && myChart.value.resize();
    initOption();
});

实现效果

(黑框表示页面大小)
页面缩小时的图表
在这里插入图片描述

页面放大时的图表
在这里插入图片描述
同理,该关系图的节点大小也可以根据页面大小进行自适应。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue使用Echarts实现容器大小自适应有以下几种方法: 1. 使用`watch`监听容器大小变化,手动调用`resize`方法: ```javascript <template> <div ref="chart" style="height: 300px;"></div> </template> <script> import echarts from 'echarts' export default { data() { return { chart: null } }, mounted() { this.chart = echarts.init(this.$refs.chart) this.initChart() }, methods: { initChart() { // 初始化图表 }, resize() { this.chart.resize() } }, watch: { '$refs.chart': { immediate: true, handler() { window.addEventListener('resize', this.resize) } } }, beforeDestroy() { window.removeEventListener('resize', this.resize) } } </script> ``` 2. 使用`resize-detector`插件自动监听容器大小变化: ```javascript <template> <div ref="chart" style="height: 300px;"></div> </template> <script> import echarts from 'echarts' import resizeDetector from 'resize-detector' export default { data() { return { chart: null } }, mounted() { this.chart = echarts.init(this.$refs.chart) this.initChart() // 监听容器大小变化 resizeDetector.addResizeListener(this.$refs.chart, this.resize) }, methods: { initChart() { // 初始化图表 }, resize() { this.chart.resize() } }, beforeDestroy() { resizeDetector.removeResizeListener(this.$refs.chart, this.resize) } } </script> ``` 3. 使用`vue-echarts`组件库自动监听容器大小变化: ```javascript <template> <v-chart :options="options"></v-chart> </template> <script> import { VChart } from 'vue-echarts/components' import 'echarts/lib/chart/bar' // 引入图表类型 import 'echarts/lib/component/tooltip' // 引入图表组件 export default { components: { VChart }, data() { return { options: { // 图表配置 } } } } </script> ``` 以上几种方法均可以实现Echarts容器大小自适应,选择哪种方法取决于项目需求和个人喜好。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值