Intersection Observer 预加载图片不生效?
我用 Intersection Observer 做图片懒加载,但有时候图片根本没触发加载,尤其是快速滚动的时候。
我试过把 rootMargin 设成 '50px',也检查了 observer 是否正确 observe 了元素,但还是偶尔失效。这是我的核心代码:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
}, { rootMargin: '50px' });
document.querySelectorAll('img[data-src]').forEach(img => {
observer.observe(img);
});
是不是我漏了什么边界情况?比如元素一开始就在视口里会不会不触发?
或者更懒的做法:直接设置
threshold: 0,然后在页面加载完成后手动触发一次 observer:其实核心问题就是:IntersectionObserver 默认只检测"从视口外进入视口"的情况,初始就在视口内的元素不会自动触发。