const obsOptions = {
// Default is null (Browser viewport). Set a specific parent element:
root: document.querySelector('#someSpecificParent'),
// add 40px inner "margin" area at which the observer starts to calculate:
rootMargin: '40px',
// Default is 0.0 meaning the callback is called as soon 1 pixel is inside the viewport.
// Set to 1.0 to trigger a callback when 100% of the target element is inside the viewport,
// or i.e: 0.5 when half of the target element is visible:
threshold: 0.5,
};
3条答案
按热度按时间mkshixfv1#
使用交集观察器API
IntersectionObserver API提供了一种异步观察目标元素与祖先元素或顶级文档的视口的交集中的更改的方法。
下面是一个当元素在视口中时触发classList toggle的示例:
观察者选项
要定义另一个父引用元素,请使用Observable options Object中的
root
选项。您还可以选择rootMargin
和超级有用的threshold
选项型
请参阅另一个interesting use case that uses the IntersectionObserver API's
threshold
选项。其他阅读:
使用 native IntersectionObserver API是解决此问题的**最有效的方法 *。
如果您想了解我们过去是如何解决类似需求的,请参阅this answer with a small custom plugin示例。
ltskdhd12#
仍然是JavaScript,但在这个版本中,你不需要监听滚动事件。速度和性能比每次检查一个对象是否在视口中要好得多。
点击这里:https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
通过交集观察器,可以定义元素可见时的回调。
选项:
root
:null <<如果你想让它在你的viewport(可见区域)内,设置为nullthreshold
:0.3 <<表示30%的可见度。如果设置为0.3,则在可见性达到至少30%时调用一次回调,并且在可见性低于30%时调用一次回调。jpfvwuh43#
另一种方法是使用滚动事件侦听器