echarts随dom大小自适应变化,并做防抖处理

2023-05-16

目录

  • 监听窗口resize事件
  • 监听dom的resize事件
  • 完整代码示例

监听窗口resize事件

监听浏览器窗口resize事件很简单,如下一行代码即可搞定:

window.addEventListener('resize', () => {})

如何监听dom的resize事件呢?

监听dom的resize事件

const myObserver = new ResizeObserve(entries => {
	console.log("dom元素resize")
})
myObserver.observe(target)//target:要监听的dom元素

需要注意的一点,在进入和离开当前页面时,dom监听事件都会触发一次。

如果在事件监听函数里面有涉及到对该dom的操作(比如说初始化echart),那么当前页面销毁后,该dom已经不存在了,而监听事件还要执行一次,就会报错(无效的dom):
在这里插入图片描述

解决方法:如果是在vue中使用,组件销毁之前停止监听即可:

beforeDestroy() {
	this.myObserver.unobserve(target)
}

完整代码示例

下面给个示例,监听echarts所绑定dom的resize事件,并做防抖处理。

<template>
	<div ref="echart" class="echart"></div>
</template>

<script>
import * as echarts from 'echarts'
export default {
	data() {
		return {
			myObserver: '',//resize监听器
			timer: '',//定时器
			myEchart: '',//echart实例
		}
	},
	
	mounted() {
		//this.loadEchart()
		//不需要执行上一行的原因是,下面的监听器会在挂载的时候自动执行一次。

		this.myObserver = new ResizeObserver(entries => {
			if(this.timer) {
				clearTimeout(this.timer)
			}
			this.timer = setTimeout(this.loadEchart(), 50)
		})
		this.myObserver.observe(this.$refs.echart)
	},
	
	beforeDestory() {
		clearTimeout(this.timer)
		/*
		清除定时器。定时任务不会随着组件销毁而销毁,所以组件销毁后,
		如果还有定时任务没有执行,就会继续调用loadEchart函数,
		而此时this.$refs.echart是undefined,echart就会报错:
		“Initialize failed: invalid dom”,意思就是“初始化失败:无效的dom”
		*/
		this.myObserver.unobserve(this.$refs.echart)
	},
	
	methods: {
		//加载echart
		loadEchart() {
			if(this.myEchart) {//如果echart已经初始化过,需要销毁,否则会报错:重复初始化
				this.myEchart.dispose()
			}
			this.myEchart = echarts.init(this.$refs.echart)
			let option = {
				xAxis: {
					data: ['1月', '2月', '3月']
				},
				yAxis: {
					type: 'value'
				},
				series: [
					{
						name: '销量',
						type: 'bar',
						data: [100, 200, 300]
					}
				]
			}
			this.myEchart.setOption(option)
		}
	}
	
}
</script>
<style scoped>
	.echart {
		width: 100%;
		height: 500px;
	}
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

echarts随dom大小自适应变化,并做防抖处理 的相关文章

随机推荐

  • SpringCloud搭配OpenFeign实现实时刷新Nacos服务列表(使用Ribbon负载均衡器解决方案)

    SpringCloud实现实时刷新Nacos服务列表使用Ribbon负载均衡器解决方案 前言错误信息解决方案一 xff08 订阅Nacos服务状态发生改变 xff0c 主动更新本地服务列表 xff09 核心代码实现原理分析 解决方案二 xf
  • Ubuntu下安装sysv-rc-conf报错:ubuntuE: Unable to locate package sysv-rc-conf

    这里我使用的是ubuntu 18 04 1版本 xff0c 当我安装sysv rc conf时 xff0c 报了如下的错 xff1a E Unable to locate package sysv rc conf xff08 无法定位sys
  • 结构体变量以及结构体数组

    1 概述 C 语言允许用户自己指定这样一种数据结构 xff0c 它由不同类型的数据组合成一个整体 xff0c 以便引用 xff0c 这些组合在一个整体中的数据是互相联系的 xff0c 这样的数据结构称为结构体 xff0c 它相当于其它高级语
  • 栈的操作(入栈、出栈)之一:顺序栈

    栈操作原则 使用栈操作数据 xff0c 必须遵循 先入后出 的原则 xff1b 栈操作之顺序栈 使用顺序表实现栈的存储结构 xff0c 本质上是数组 xff0c 数组的一端做栈底 xff0c 另一端做栈顶 xff1b 一个数组其下标最低的位
  • 软件工程——六种模型

    瀑布模型 思想 xff1a 1 从制作时间上按工序把问题化简 2 将功能实现与制作分开便于分工协作 特点 xff1a 1 时间顺序性和依赖性 2 推迟实现的观点 3 质量保证的观点 优点 xff1a 1 奠定了软件工程方法的基础 xff1b
  • AVT工业相机Windows、Opencv开发——驱动相机(超详细)

    一 概述 1 1使用Vimba控制相机需要经历以下几个步骤 1 打开Vimba 2 查找相机列表 3 打开特定相机 4 配置参数 xff08 可选 xff09 5 采集 xff1a 采集过程共分为5步 xff0c 具体见1 2 6 关闭相机
  • python-opencv尺寸测量

    首先 xff0c 利用机器视觉来测定零件尺寸 xff0c 我们能够直接得到的是图片的像素 xff0c 要想获得尺寸大小 xff0c 我们必须找到像素和实际尺寸间的关系 我们在这里定义一个比例概念 xff1a 每度量比的像素 xff08 pi
  • Bounding box(bbox) 预测

    在出现Bounding box预测之前 xff0c 一般都是通过滑动窗口进行目标检测 本文前两部分介绍滑动窗口算法 xff0c 这样是为了更好介绍 bounding box如何引出 为了解决什么问题而引出的 也可直接跳跃到第三部分看有关bo
  • YOLOv3网络结构分析以及工作流程

    注意 xff1a 本文章有很多图 xff0c 但是都是YOLOv3的结构图 xff0c 只是每张图表达出的信息都各有特色 xff0c 可将这些结构图结合起来 xff0c 能更好的理解 1 Darknet 53 模型结构 在论文中虽然有给网络
  • 飞浆七天深度学习

    文章目录 前言图像处理原理与深度学习入门百度的飞浆实战可视化数据准备可视化效果图片 深度学习原理与使用方法实战手势识别 卷积神经网络原理与使用实战车牌识别分割字符的代码定义MyLeNet网络 经典卷积网络解读数据增强计算VGG的参数小姐姐手
  • Ubuntu18.04安装教程——超详细的图文教程

    电脑配置 xff1a 名称 xff1a Lenovo 拯救者Y7000P 处理器 xff1a i7 10750H 内存 xff1a 32G 固态 xff1a 1TB 显卡 xff1a RTX2060 6G 一 准备工作 本文以 Ubuntu
  • VINS-Course代码解析——run_euroc前端数据处理

    vins mono总框架如下 xff1a 主要分为三大块 xff1a 我们先从主函数 main 入手 xff1a 主函数中有三个线程 xff0c 读取完数据集和配置文件的路径后就会进入这三个线程 xff0c 如下图 xff1a thd Ba
  • C++求解N个数的最大公约数、最小公倍数

    一 2个数的最大公约数 span class token comment 辗转相除法 span span class token keyword int span span class token function gcd span spa
  • 子序列个数——动态规划

    题目 xff1a 统计一个字符串中全部不同的子序列的个数 思路 xff1a 动态规划求解 令 f i 61 前 i 个元素中包含的全部子序列的个数 那么状态转移方程分为下面两种情况 xff1a 当第 i 个元素在前面 i 1 个字符中没有出
  • 字符串中特定子序列出现的次数(动态规划)

    题目 xff1a 给定一个字符串 xff0c 求子序列 cwbc 出现的次数 思路 xff1a 动态规划 令 dp i j 表示前 i 个字符中匹配了字符串 cwbc 中前 j 位 xff08 j 61 1 2 3 4 xff09 的个数
  • 认识node

    一 认识node node是一个基于Chrome V8引擎的JavaScript代码运行环境 浏览器 xff08 软件 xff09 能够运行JavaScript代码 xff0c 浏览器就是JavaScript代码的运行环境 xff08 js
  • python爬虫-使用request,lxml库爬取游戏排名

    爬取目标URL xff1a http wy hao123 com top 开发环境 xff1a PyCharm 2019 2 3Python3 6火狐浏览器 使用的三方库 xff1a requestslxml 执行结果 开始 抓取网页 打开
  • 知识追踪模型——教育大数据挖掘(持续更新......)

    知识追踪 xff08 2015 NIPS xff09 Deep Knowledge Tracing xff08 2017 WWW xff09 Dynamic Key Value Memory Networks for Knowledge T
  • Wireshark从安装到使用详细指南

    前言 wireshark是一款非常优秀的网络封包分析软件 xff0c 具有极为强大的功能 可以截取各种类型的网络封包 xff0c 并且显示网络封包的详细信息 值得一提的是 xff0c 为了安全性考虑 xff0c wireshark无法实现改
  • echarts随dom大小自适应变化,并做防抖处理

    目录 监听窗口resize事件监听dom的resize事件完整代码示例 监听窗口resize事件 监听浏览器窗口resize事件很简单 xff0c 如下一行代码即可搞定 xff1a window span class token punct