IntersectionObserver.observe()

Experimental: 这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

IntersectionObserver 对象的**observe()** 方法向 IntersectionObserver 对象监听的目标集合添加一个元素。一个监听者有一组阈值和一个根, 但是可以监视多个目标元素,以查看这些目标元素可见区域的变化。调用IntersectionObserver.unobserve()方法可以停止观察元素。

当指定元素的可见区域超过监听者的可见区域阈值之一时(阈值列表IntersectionObserver.thresholds),监听者的回调会被传入代表当前发生的交叉变化IntersectionObserverEntry并执行。请注意,这种设计允许通过调用一次回调,给回调传入 IntersectionObserverEntry 对象数组,来实现同时处理多个被监听元素的交叉变化。

语法

IntersectionObserver.observe(targetElement);

参数

targetElement

可见性区域被监控的元素element。 此元素必须是根元素的后代 (如果根元素为视窗,则该元素必须被当前文档包含)。

返回值

undefined.

示例

// Register IntersectionObserver
const io = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    // Add 'active' class if observation target is inside viewport
    if (entry.intersectionRatio > 0) {
      entry.target.classList.add('active');
    }
    // Remove 'active' class otherwise
    else {
      entry.target.classList.remove('active');
    }
  })
})

// Declares what to observe, and observes its properties.
const boxElList = document.querySelectorAll('.box');
boxElList.forEach((el) => {
    io.observe(el);
})

规范

Specification
Intersection Observer
# dom-intersectionobserver-observe

浏览器兼容性

BCD tables only load in the browser

参考