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