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

瀏覽器相容性

另見