IntersectionObserver

Baseline 广泛可用 *

此功能已成熟,并可在多种设备和浏览器版本上运行。自 2019 年 3 月以来,它已在所有浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

IntersectionObserver 接口是 Intersection Observer API 的一部分,它提供了一种异步观察目标元素与祖先元素或顶级文档的 视口 交叉区域变化的方法。祖先元素或视口被称为“根”。

创建 IntersectionObserver 时,它会被配置为监视根元素内可见比例的给定阈值。一旦创建,该配置就无法更改。因此,同一个 observer 对象只能用于监视特定可见度变化阈值;不过,您可以使用同一个 observer 监视多个目标元素。

构造函数

IntersectionObserver()

创建一个新的 IntersectionObserver 对象,当它检测到目标元素的可见度已越过一个或多个阈值时,将执行指定的回调函数。

实例属性

IntersectionObserver.delay 只读 实验性

一个整数,表示此 observer 发送通知之间的最小延迟时间。

IntersectionObserver.root 只读

在测试交叉区域时用作边界框的 ElementDocument。如果构造函数未传递 root 值或其值为 null,则使用顶级文档的视口。

IntersectionObserver.rootMargin 只读

一个偏移矩形,在计算交叉区域时应用于根的 边界框,从而有效地缩小或扩大根以用于计算。此属性返回值可能与调用构造函数时指定的值不同,因为它可能会被修改以满足内部需求。每个偏移量都可以用像素 (px) 或百分比 (%) 表示。默认值为 "0px 0px 0px 0px"。

IntersectionObserver.scrollMargin 只读

一个偏移矩形,应用于从交叉区域根到目标的路径上的每个 滚动容器,从而有效地缩小或扩大用于计算交叉区域的裁剪矩形。此属性返回值可能与调用构造函数时指定的值不同。

IntersectionObserver.thresholds 只读

一个按数值升序排列的阈值列表,其中每个阈值都是已观察目标交叉区域面积与其边界框面积的比率。当目标的任何阈值被越过时,就会为其生成通知。如果构造函数未传递任何值,则使用 0。

IntersectionObserver.trackVisibility 只读 实验性

一个布尔值,指示此 IntersectionObserver 是否正在检查目标是否具有受损的可见性。

实例方法

IntersectionObserver.disconnect()

停止 IntersectionObserver 对象监视任何目标。

IntersectionObserver.observe()

告诉 IntersectionObserver 要监视的目标元素。

IntersectionObserver.takeRecords()

返回一个 IntersectionObserverEntry 对象数组,其中包含所有已观察目标的信息。

IntersectionObserver.unobserve()

告诉 IntersectionObserver 停止监视特定的目标元素。

示例

js
const intersectionObserver = new IntersectionObserver((entries) => {
  // If intersectionRatio is 0, the target is out of view
  // and we do not need to do anything.
  if (entries[0].intersectionRatio <= 0) return;

  loadItems(10);
  console.log("Loaded new items");
});
// start observing
intersectionObserver.observe(document.querySelector(".scrollerFooter"));

规范

规范
交集观察器
# intersection-observer-interface

浏览器兼容性

另见