配置 IntersectionObserver 以根据 X 像素更改 *.isIntersecting 的值

Configure IntersectionObserver to change value of *.isIntersecting based on X pixels

我有交点观察器对象,它可以工作,但我希望它在某个元素超过交点或交点底部 100 像素时通知我。

使用默认配置,一旦元素正好在视图中,它就会更改 .isIntersection 的值。但是当元素在视口上方或下方 100 像素时,我想做一些事情。

这是我的代码:

var iObserver = new IntersectionObserver(function(element) {
  console.log('elementi', element); // I want to trigger here when elementi is 100px or less of distance to the viewport.
});

var el;
for (var i = 0; i < elements.length; i++) {
  el = elements[i];
  console.log('eli', el);
  iObserver.observe(el);
}

更新

感谢用户的回答,我使用了它并且有效:

var iObserver = new IntersectionObserver(function(entryEvent) {
 //...
}, {'rootMargin': '100px 0px 100px 0px'});

您可以在传递给观察者的选项中定义 rootMargin 顶部和底部。

在演示中,悬停红色矩形,当它与 .container 的距离达到 10px 时,观察者被称为:

const options = {
  root: document.querySelector('.container'),
  rootMargin: '10px 0px 10px 0px',
};

let i = 0;

const iObserver = new IntersectionObserver((entries) => console.log(`intersection ${i++}`), options);

iObserver.observe(document.querySelector('.element'));
.container {
  position: relative;
  height: 20px;
  background: lightblue;
}

.element {
  position: absolute;
  top: calc(100% + 30px);
  height: 100px;
  width: 100px;
  background: red;
  margin-bottom: 20px;
  transition: top 5s;
}

.element:hover {
  top: calc(100% - 30px);
}

.as-console-wrapper {
  height: 50px;
}
<div class="container">
  <div class="element">1</div>
</div>