当前位置: 首页 > news >正文

【Vue】vue3 中使用 ResizeObserver 监听元素的尺寸宽度变化

要监听 div 宽度的变化,可以使用 ResizeObserver 接口。ResizeObserver 允许你观察一个或多个元素的尺寸变化,并在发生变化时执行回调函数。这种方法比使用 MutationObserver 更专注于尺寸变化,且不受元素属性变化的影响。

使用 ResizeObserver

首先,创建一个 ResizeObserver 实例,并传入一个回调函数,该函数将在元素尺寸变化时被调用。在回调函数中,你可以访问每个观察到的元素的新尺寸。

const resizeObserver = new ResizeObserver(entries => {entries.forEach(entry => {const { width, height } = entry.contentRect;console.log(`Element resized: Width=${width}, Height=${height}`);});
});// 假设你想观察的元素是一个具有特定ID的div
const observedElement = document.querySelector('#yourDivId');// 开始观察该元素
resizeObserver.observe(observedElement);// 当需要停止观察时,可以调用 disconnect 方法
// resizeObserver.disconnect();

在 vue3 中的使用

const container = ref(null);
let observer;
let resizeTimer;onMounted(() => {createObserver();
});onUnmounted(() => {if (observer) {observer.disconnect();}
});function createObserver() {observer = new ResizeObserver((entries) => {clearTimeout(resizeTimer);resizeTimer = setTimeout(() => {for (const entry of entries) {const { width, height } = entry.contentRect;console.log(width);}}, 200);});observer.observe(container.value);
}
<div ref="container"></div>

注意事项

  • ResizeObserver 是现代浏览器支持的 API,不是所有浏览器都支持。请确保你的目标浏览器支持此 API,或者使用 polyfill 来提供跨浏览器兼容性。
  • ResizeObserver 只能观察到元素的尺寸变化,不能检测到元素的内容变化或内部布局变化。
  • 如果你需要在元素的内容或布局变化时也触发事件,可能需要结合使用其他技术,如 MutationObserver

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 洛谷练习(8.6)
  • Maven实战.插件
  • 深入SpringBoot:SpringCache的集成与使用
  • SQL注入之sqli-labs靶场第一关
  • sql server 通过 sql查询今天、本周、上周、本月、上月、今年、去年的时间范围
  • forwardRef和useImperativeHandle到底能做啥
  • DataWhale AI夏令营-英特尔-阿里天池LLM Hackathon
  • Xlua原理分析 四
  • 虚拟机ubuntu22.04找不到ttyUSB*端口
  • Windows系统之环境变量
  • Lumos学习王佩丰Excel第十讲:Sumif函数
  • .NET未来路在何方?
  • ei会议论文是什么级别
  • 登录相关功能的优化【JWT令牌+拦截器+跨域】
  • 研0 冲刺算法竞赛 day27 P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【comparator, comparable】小总结
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 2018一半小结一波
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • HTTP请求重发
  • HTTP中GET与POST的区别 99%的错误认识
  • Magento 1.x 中文订单打印乱码
  • orm2 中文文档 3.1 模型属性
  • PHP 7 修改了什么呢 -- 2
  • Python_OOP
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 分布式事物理论与实践
  • 关于List、List?、ListObject的区别
  • 力扣(LeetCode)21
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端面试题总结
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 小程序开发之路(一)
  • 一文看透浏览器架构
  • 移动端唤起键盘时取消position:fixed定位
  • 再次简单明了总结flex布局,一看就懂...
  • 自动记录MySQL慢查询快照脚本
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (0)Nginx 功能特性
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C++20) consteval立即函数
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (ZT)一个美国文科博士的YardLife
  • (八十八)VFL语言初步 - 实现布局
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (五)MySQL的备份及恢复
  • (一) storm的集群安装与配置
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)