关于页面尺寸变动,echarts或地图等自适应的一种方法(监听特定DOM元素尺寸变化)

news/2024/9/24 1:23:22/

1.问题

项目中,页面做了响应式布局.大量使用了弹性布局,导致盒子没有固定的宽高,在菜单切换或者窗口缩放时,echarts或者地图元素就会出现扭曲,错版,填充不完全,溢出等问题.

当通过监听window的resize事件时,难以精准捕捉目标容器,同时echarts的resize()方法并不一定达到效果

2. 解决方案

2.1 ResizeObserver 对象

ResizeObserver 是一个现代 JavaScript API,用于监听 DOM 元素的尺寸变化。在过去,监听元素尺寸变化通常依赖于 window 的 resize 事件,但这只能捕捉到窗口尺寸变化。ResizeObserver 为监控特定元素的尺寸变化提供了精确的方法,而不依赖于窗口尺寸。

2.2 使用(开始观察)

function handleResize(){// 选择需要监听的 DOM 元素this.dom = document.getElementById('id');// 创建一个 ResizeObserver 实例,并传入回调函数this.resizeObserver = new ResizeObserver((entries ) => {// entries 是观察到的元素集合for (let item of entries ) {//发现当前发生尺寸变化的dom元素中,有目标元素if(item.target === this.dom){this.myEcharts.dispose()//销毁当前echarts实例或其他目标实例this.setEcharts(data)//重新创建}});// 开始观察元素尺寸变化resizeObserver.observe(this.dom);
}

2.3 回调参数详解

回调函数的参数 entries 是一个包含 ResizeObserverEntry 对象的数组。每个ResizeObserverEntry 对象代表一个被观察的元素,并提供以下信息:

  1. target: 被观察的元素。
  2. contentRect: 一个 DOMRectReadOnly 对象,包含元素的尺寸和位置信息。可以使用 contentRect.width 和 contentRect.height 获取元素的新尺寸。
  3. borderBoxSize: (可选)如果浏览器支持,这个属性会包含元素的边框尺寸。

2.4 停止观察

// 停止观察特定元素
resizeObserver.unobserve(dom);// 停止观察所有元素,可在页面销毁阶段进行性能释放
resizeObserver.disconnect();

2.5 浏览器支持

ResizeObserver 是现代浏览器的新特性,主要支持在较新的浏览器版本中。在使用之前,请确保目标浏览器支持该 API

2.6 注意事项

  1. ResizeObserver 不应过度使用,否则可能导致性能问题。确保只监听必要的元素。
  2. 如果存在复杂的组件层次结构,确保合理管理 ResizeObserver 实例,避免内存泄漏。
  3. ResizeObserver 是一个强大的工具,为你提供了监控 DOM 元素尺寸变化的方法。通过合理使用它,你可以实现自适应布局和图表调整等功能,同时确保应用程序的性能。

http://www.ppmy.cn/news/1433840.html

相关文章

数仓建模—大数据建模

数仓建模—大数据建模 大数据主要解决无法使用传统数据处理工具和方法轻松处理、管理或分析的大型且复杂数据集的问题,前面我们介绍了几种建模方式, 数仓建模—建模方法论之实体-关系(Entity-Relationship)建模 数仓建模—建模方法论之范式建模 数仓建模—建模方法论之维…

数据库管理-第175期 深入探索CPU性能(20240424)

数据库管理175期 2024-04-24 数据库管理-第175期 深入探索CPU性能(20240424)1 CPU的主要性能指标2 CPU的运行状态2.1 CPU Usage/CPU Utilization2.2 CPU Load 3 CPU4OLTP总结 数据库管理-第175期 深入探索CPU性能(20240424) 作者&…

Docker基本操作学习

基本指令 docker服务启动: service docker start service docker restart service docker stop# 重启服务器自动运行docker systemctl enable docker镜像生成方式: 通过docker build DockerFile… 生成镜像 镜像相关指令: docker push 仓…

【抽代复习笔记】14-群(八):变换群中的旋转、位似、平移变换群

定理1:集合A上的所有一一变换的集合G关于变换的乘法(复合)作成群。 证:首先,恒等变换ɛ:A→A(ɛ(x) x)是集合A上的一一变换,所以ɛ∈G,即G≠∅; ①对任意的f,g∈G,由映…

深度学习基础——卷积神经网络的基础模块

深度学习基础——卷积神经网络的基础模块 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习中一种非常重要的神经网络结构,它在图像识别、图像分类、目标检测等领域取得了巨大成功。本文将介绍卷积神经网络的几个基础…

直面盲人出行挑战:实时避障系统安全性能为独立出行保驾护航

作为一名资深记者,我长期关注并报道特殊群体在社会生活中所面临的种种问题与挑战。其中,盲人出行的困难尤为引人关注。然而,科技的力量正以一种潜移默化的方式,为解决这一难题提供新的可能性。 实时避障系统安全性能这一词汇所涵…

Vue的列表渲染和双向绑定(初学vue之v-for以及v-model)

目录 一、列表渲染(v-for)介绍: 1.概念 2.好处 3.作用 4.应用 5.用法 二、双向绑定(v-model)介绍: 1.概念 2.好处 3.作用 4.应用 5.用法 三、v-for和v-model具体用法 1.v-for的基本使用 2.v…

HTB Runner

Runner User Nmap ──(root㉿kali)-[/home/…/machine/SeasonV/linux/Runner] └─# nmap -A runner.htb -T 4 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-22 23:07 EDT Stats: 0:00:01 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Sca…