javascript - 在 Intersection Observer API 中定位目标
问题描述
我仍在尝试与 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”调用实例中的第一个参数传递)。我的问题是,每当调用回调函数时,它总是将“滑入”类仅添加到“$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);
推荐阅读
- html - 我想事先将我自己的文本附加到 html 中的谷歌搜索中
- javascript - JavaScript 中字符串的长度
- django - 如何在 django 的 oneToOneField 上过滤不区分大小写
- macos - 下拉列表中图标图像的 QComboBox 样式
- javascript - 将解析的百分比数据转换为新数组
- jenkins - 无法通过 Jenkins 向远程机器运行命令
- visual-studio-code - 有没有办法在 Visual Studio 代码中查看数据集及其内容?
- rabbitmq - 如何通过 stomp js 控制订阅交易所?
- python - 如何通过传递参数重新排列数据框中的列
- django - 如何通过 redux 将参数传递给 django api 调用?