【发布时间】:2020-03-08 16:34:10
【问题描述】:
我拥有的是一个包含大约 30 张卡片的 div。我想要实现的是:每次用户滚动时,我都会在当前视口中检索卡片并将它们视为“已访问”。例如,在第一次滚动后,视口中的当前卡片是 id = 1,2,3,4 的卡片,我将在第一次滚动后将它们标记为已访问。如何以最佳性能实现这一目标?
<div id="search-results">
<div class="search-card" id="card-1"></div>
<div class="search-card" id="card-2"></div>
<!-- 30 elements with class = "search-card" -->
</div>
我尝试按照建议使用 Intersection Observer API,但我认为我做错了什么?它没有观察到......它只在页面加载时触发。我应该添加滚动事件还是什么?
var options = {
root: document.querySelector('#search-results'),
rootMargin: '0px',
threshold: 1.0
};
var callback = function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
console.log(entry.target)
}
else {
console.log('not intersecting')
}
});
};
const observer = new IntersectionObserver(callback, options);
var targets = document.querySelectorAll('.search-card');
targets.forEach(function(target) {
observer.observe(target)
});
【问题讨论】:
-
谢谢你的建议,我试过了,但我觉得我做错了什么......你能检查一下编辑吗?
标签: javascript html css angularjs