今天我们将通过一些示例来探讨如何在 React 中使用相交观察器 API。
Mozilla Web 文档将交叉观察器 API 描述为:
允许代码注册一个回调函数,每当他们想要监视的元素进入或离开另一个元素(或视口)时,或者当两个元素相交的值改变所请求的量时,该函数就会运行。这样,站点不再需要在主线程上执行任何操作来观察这种类型的元素交集,并且浏览器可以自由地优化其认为合适的交集管理。
简而言之,它允许我们检测某个元素何时在视口中可见,只有当该元素满足所需的交叉比例时才会发生这种情况。
如您所见,如果向下滚动页面,交叉比例将会增加,直到达到预计限制,此时会触发执行回调的函数。
const observer = new IntersectionObserver(callbackFunction, options) observer.observer(elementToObserver)
相交观察者构造函数对象需要两个参数:
就这样,我们准备好看到一些操作,但首先,我们需要知道每个选项的含义,选项参数是一个具有以下值的对象:
const options = { root: null, rootMargin: "0px", threshold: 1 }
现在我们将看到 React 中交叉观察器 API 的实现。
const observer = new IntersectionObserver(callbackFunction, options) observer.observer(elementToObserver)
const options = { root: null, rootMargin: "0px", threshold: 1 }
请记住,这只是一个基本实现,有多种方法可以做到这一点。
现在我们将实现与之前相同的代码,但将所有逻辑分离在名为 useElementOnScreen 的 nu 钩子中。
const containerRef = useRef(null) const [isVisible, setIsVisible] = useState(false) const callbackFunction = (entries) => { const [entry] = entries setIsVisible(entry.isIntersecting) } const options = { root: null, rootMargin: "0px", threshold: 1.0 } useEffect(() => { const observer = new IntersectionObserver(callbackFunction, options) if (containerRef.current) observer.observe(containerRef.current) return () => { if (containerRef.current) observer.unobserve(containerRef.current) } }, [containerRef, options]) return ( <div className="app"> <div className="isVisible">{isVisible ? "IN VIEWPORT" : "NOT IN VIEWPORT"}</div> <div className="section"></div> <div className="box" ref={containerRef}>Observe me</div> </div> )
<div className="box" ref={containerRef}>Observe me</div>
1- 将新创建的钩子导入到我们的组件中。
2 - 使用选项对象初始化它。
3 - 这就是我们的结束方式。
恭喜,我们已经成功使用了路口观察器 API,甚至为它创建了一个钩子!
使用 React 的 Intersection Observer,最初由 Producthackers 编写
感谢您阅读这篇文章。我希望能为您提供一些有用的信息。如果是这样,如果您推荐这篇文章并点击 ♥ 按钮,以便更多人可以看到这篇文章,我将非常高兴。
以上是如何在 React 中使用 Intersection Observer的详细内容。更多信息请关注PHP中文网其他相关文章!