【发布时间】:2020-02-05 13:42:25
【问题描述】:
我有这个fiddle 来显示我的问题。
我已经为延迟加载图片做了一个交叉点观察器,代码:
const images = document.querySelectorAll("[data-src]");
function preloadImage(img){
const src = img.getAttribute("data-src");
if (!src) { return; }
img.src= src;
}
const imgOptions = {
threshold: 0,
rootMargin: "0px 0px 300px 0px"
};
const imgObserver = new IntersectionObserver( (entries, imgObserver) => {
entries.forEach(entry => {
if(!entry.isIntersecting){
return;
} else {
preloadImage(entry.target);
imgObserver.unobserve(entry.target);
}
})
}, imgOptions);
images.forEach( image => {
imgObserver.observe(image);
});
当我循环通过 Siema 轮播时出现问题,最后一张和第一张图像“卸载”,意思是 src 返回到 data-src,尽管它在相交后被告知 unobserve。
要查看问题,只需单击小提琴中的“上一个”。第一张图片会消失,但它已经加载了。
为什么会这样,我做错了什么?
编辑: Fixed working fiddle,谢谢@ohladkov
【问题讨论】:
标签: javascript carousel lazy-loading intersection-observer siema