问题描述
我仍在尝试使用Javascript交朋友,所以我也使用Intersection Observer API。 我有三个目标元素正在监视它们在设备视口中的可见性:
let $target_1 = section1.querySelector('.about-me');
let $target_2 = section1.querySelector('.background');
let $target_3 = section1.getElementsByClassName('content');
这是观察者的声明:
let settings = {
root: null,threshold: 0.15
}
let observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if(entry.intersectionRatio >= 0.15) {
$target_1.classList.add('slide-in');
}
});
},settings);
然后观察我的目标:
observer.observe($target_1);
observer.observe($target_2);
observer.observe($target_3);
到目前为止,我相信当我的任何目标在视口中可见的比例为15%(0.15)时,都会调用回调函数(在“ IntersectionObserver”调用实例中作为第一个参数传递)。 我的问题是,每当调用回调函数时,它将始终将'slide-in'类仅添加到'$ target_1'元素中。 我想要的是,应该将“滑入”类添加到当前观察到的目标中。就像
e.currentTarget.classList.add('slide-in')之类。
我不想创建许多Intersection Observer实例来监视我的目标,即
let observer = new IntersectionObserver( callback,options );
let observer2 = new IntersectionObserver( callback,options );
let observer3 = new IntersectionObserver( callback,options );
有没有一种方法可以访问当前观察到的目标元素?
解决方法
实际上非常简单,就像您通过事件访问目标一样。
看看下面的代码,我刚刚将访问元素的方式从$ target_1变量更改为函数参数的条目。
entry.target.classList.add('slide-in');
这是完整的代码:
let settings = {
root: null,threshold: 0.15
}
let observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if(entry.intersectionRatio >= 0.15) {
entry.target.classList.add('slide-in');
}
});
},settings);