3 回答
TA贡献1871条经验 获得超13个赞
您应该看看Intersection Observer (IO),它旨在解决像您这样的问题。侦听滚动事件并计算位置可能会导致性能不佳。
首先,您必须定义 IO 的选项:
let options = {
root: document.querySelectorAll('.section-four'),
rootMargin: '0px',
threshold: 1.0
}
let observer = new IntersectionObserver(callback, options);
定义选项后,您必须告诉观察者要观察哪些元素,我想在您的情况下这将是.section-four:
let targets = document.querySelectorAll('.section-four');
targets.forEach(target => {
observer.observe(target) }
)
最后一步是定义一旦.section-four进入视图就应该执行的回调函数:
let callback = (entries, observer) => {
entries.forEach(entry => {
// Each entry describes an intersection change for one observed
// target element
// here you can do something like $(entry.target).find('circle') to get your circle
});
};
看看这个演示,根据元素可见的程度,背景颜色会发生变化。我认为这与您的问题很接近,您只是不更改为元素内的圆圈设置动画的 bg 颜色。
站点上还有另一个演示,显示屏幕上可见元素的数量,也许这更适合您。
您还可以使用w3c 的这个polyfill来支持旧浏览器。
添加回答
举报