我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ResizeObserver监视DOM大小变化示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ResizeObserver监视DOM大小变化示例详解

引言

ResizeObserver 用于监听元素的大小尺寸变化,常见用于监听自适应大小的元素变化引起的宽高变化时处理应宽高变化而需要 JS 做特定处理的场景。

说下我自己使用中遇到的三个场景:

  • Tabs 组件的头部区域在超过宽度/高度时需要展示出超出滚动按钮
  • 组件中存在超出隐藏的场景,如多个标签超出一行后将剩余标签进行压缩等
  • Table 组件横向滚动如果存在某几列数据需要固定展示的情况下需要根据宽度来计算是否需要出现滚动条和滚动体室阴影

可以看出上面几个场景共性:当样式需要自适应宽高,而脚本又需要按照元素宽高来执行某些操作时。这些场景使用 ResizeObserver 就可以比较方便的进行处理。

使用

使用 ResizeObserver 第一步同样是先需要实例化一个 observer,第二步便是使用 observerobserve 将需要监听的元素添加到监视列表中:

const observer = new ResizeObserver((entries, observer) => {
    entries.forEach(entry => {
        console.log(entry);
    });
});
observer.observe(target);

实例化时只需要接受一个参数:尺寸变化时的回调,回调函数中的 entries 则是所有添加到监视列表中的元素的 entry 信息列表,而 observer 同样是上面实例化的 observer 的引用。

Script

const observer = new ResizeObserver(entries => {
  entries.forEach(entry => {
    console.log(entry);
  })
})
observer.observe(document.getElementById('target'));

entry

entry 中包括以下五个属性:

  • borderBoxSize: 监听元素的 borderBox 尺寸
  • contentBoxSize: 监听元素的 contentBox 尺寸
  • devicePixelContentBoxSize: 监听元素的 contentBox 尺寸,不过是设备像素维度,而不是展示维度
  • contentRect: 监听元素的 contentRect 信息,同 getClientRects
  • targetentry 所属的监听元素

borderBoxcontentBox 就是我们常说的 CSS 盒模型中的 borderBoxcontentBoxentry 中的 borderBoxSizecontentBoxSize 中包含两个属性:blockSizeinlineSize,这两个属性的值与页面元素的 writing-mode 相关,默认情况下 blockSize 为纵向尺寸一般为高度,inlineSize 为横向尺寸一般为宽度。而当书写模式为纵向时,blockSizeinlineSize 的纵横向关系会调换。

devicePixelContentBoxSize 则和设备像素比相关,在移动设备或是高分辨率屏幕中会与 CSS 像素存在差异。

其它 API

除了 observe 外,observer 还提供了 unobserve 来解除某个元素的监听,或直接调用 disconnect 来关闭对所有元素的监听。

兼容与 polyfill

ResizeObserver 的兼容性较差,一般情况下推荐需要使用 polyfill 来进行补全:

  • chrome 64
  • edge 79
  • firefox 69
  • safari 13.1
  • ie 不支持

常用的 polyfill:www.npmjs.com/package/res…

以上就是ResizeObserver 监视 DOM大小变化示例详解的详细内容,更多关于ResizeObserver 监视 DOM 的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ResizeObserver监视DOM大小变化示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Shell脚本实现监测文件变化的示例详解

目录代码使用方法我最近在使用linux的过程中遇到,遇到这样一个需求:监测某个文件的创建,变动、删除,并记录文件的每一个版本。我在网上没有找到合适的脚本或工具,然后我就自己写了一个shell脚本实现这个需求。 代码 完整的shell脚本如下
2022-06-22

Vue使用Echarts实现大屏可视化布局示例详细讲解

这篇文章主要介绍了Vue使用Echarts实现大屏可视化布局示例,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-09

编程热搜

目录