ResizeObserver是一个强大的 JavaScript API,它使开发人员能够轻松地监听和响应 DOM 元素的大小变化。本文将深入了解ResizeObserver的用法和潜力。
注意❗
注意:ResizeObserver生效的前提是DOM元素要宽度或者高度变化才行,一般DOM元素宽度会设置成 100%,或者高度亦如此。这样改变视口宽高后,ResizeObserver 方法才能正确监听DOM元素变化。
ResizeObserver有什么优势?
在传统的前端开发中,监听并响应元素的大小变化需要依靠窗口的 ‘resize’ 事件,然后手动计算元素的大小,这既低效又麻烦。现在,ResizeObserver API 使这一切变得更简单、更直接,它允许你直接观察一个元素的尺寸是否发生了变化。
基本用法
要使用 ResizeObserver,你需要首先创建一个新的 ResizeObserver 对象,并传递一个回调函数,该回调函数在所观察的元素尺寸发生变化时被触发。
这个回调函数接收一个entries参数,每个entry对象都代表了一个被观察元素的一次尺寸变化,包含了该元素的相关信息,如目标元素(entry.target)、新的尺寸(entry.contentRect)等。
然后,使用observe()函数来指定需要观察的元素:
以上代码表示开始观察 id 为 “myElement” 的元素。一旦该元素的大小发生变化,我们就可以在 console 中看到输出的新尺寸。
停止监听
如果你不再需要观察元素,可以调用unobserve()来停止观察:
如果你想停止观察所有元素,可以调用 disconnect() 方法:
ResizeObserver 在vue3项目中的应用
作为前端开发者,想必大家都用过ResizeObserver 来监听DOM尺寸变化,然后根据变化做一些业务或者功能。这里和大家分享实现监听div元素变化来修改canvas尺寸的功能。同一个功能,有两种写法。
第一种:采用 vueuse 库
vueuse是vue3的组合式API第三方库,里面包含了很多实用有趣的组合式API,为开发者节约了很多学习成本,可谓是开箱即用的效率。它有一个专门监听DOM元素变化的useResizeObserver API,只需要传递参数即可实时监听DOM元素和动态获取变化尺寸值。
1、导入方法:
2、监听目标:
3、实现监听:
这里需要在setup模块内,写一个ref绑定DOM,同时传递给useResizeObserver 方法,当然,这里也要打印监听结果,方便观察监听是否生效。
缩放浏览器视口大小,div尺寸发生变化,那么监听即可生效。
第二种:在js中采用原生写法监听DOM元素变化
这种需求一般是将页面的DOM元素ID传递到js,通过document来获取真实的DOM元素对象,并将对象传递给ResizeObserver进行监听操作,而外部无需关系内部逻辑,可以通过callback回调函数接收DOM元素变化值。
关于ResizeObserver
ResizeObserver 提供了强大而又灵活的监听和响应元素尺寸变化的能力,使得我们可以轻松构建响应式的用户界面。不过,它也有一些局限性,例如不能监听元素的位置变化。在使用时,需要根据具体需求来慎重选择是否使用。希望这篇文章能帮助你理解并开始使用 ResizeObserver。