Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ResizeObserver 作用是什么【热度: 416】 #866

Open
yanlele opened this issue Aug 31, 2024 · 0 comments
Open

ResizeObserver 作用是什么【热度: 416】 #866

yanlele opened this issue Aug 31, 2024 · 0 comments
Labels
web应用场景 应用场景类问题 美团 公司标签
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Aug 31, 2024

关键词:ResizeObserver api

ResizeObserver 的作用是监测元素的尺寸变化。这是一种强大的 Web API,允许开发者在元素的尺寸发生改变时(无论是因为元素内容的变化、窗口大小的调整还是其他原因导致的尺寸改变),执行一些操作或布局更新。在过去,开发者通常需要依赖定时器或者窗口的 resize 事件来间接监测元素尺寸的变化,这种方法不仅不够精确,而且效率低下。ResizeObserver 提供了一种更为直接和高效的方式来响应尺寸变化。

如何使用 ResizeObserver

使用 ResizeObserver 很简单,你只需要创建一个 ResizeObserver 实例,并为它提供一个回调函数。在回调函数中,你可以基于元素尺寸的变化来执行相应的操作。然后,使用 observe 方法来指定需要被观察尺寸变化的元素。

示例代码

下面的示例代码展示了如何使用 ResizeObserver 来监测一个元素的尺寸变化,并在尺寸变化时输出新的尺寸信息:

// 监测的目标元素
const targetElement = document.querySelector(".resizable");

// 创建 ResizeObserver 实例
const resizeObserver = new ResizeObserver((entries) => {
  for (let entry of entries) {
    // entry.target 是被观察的元素
    // entry.contentRect 包含了元素的尺寸信息
    console.log("Element size changed:", entry.target);
    console.log(`New width: ${entry.contentRect.width}`);
    console.log(`New height: ${entry.contentRect.height}`);
  }
});

// 开始观察目标元素
resizeObserver.observe(targetElement);

应用场景

ResizeObserver 的常见应用场景包括:

  • 响应式布局:当容器的尺寸改变时,动态调整内容或布局,提供更好的响应式设计。
  • 图表和可视化:在图表或数据可视化的容器大小改变时,重新绘制图表来适应新的尺寸。
  • 动态元素(如弹出窗口和下拉菜单):监测并根据内容大小自动调整元素的尺寸。
@yanlele yanlele added web应用场景 应用场景类问题 美团 公司标签 labels Aug 31, 2024
@yanlele yanlele added this to the milestone Aug 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
web应用场景 应用场景类问题 美团 公司标签
Projects
None yet
Development

No branches or pull requests

1 participant