首屏的图片都正常,往下滚动加载出来的十几张卡片图全是灰块,滑回去再等一会儿也不加载,只有刷新页面才恢复。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

const io = new IntersectionObserver(cb);
const imgs = document.querySelectorAll('img[data-src]');
imgs.forEach(el => io.observe(el));

观察器只对初始页面里的图片建立了监听,后来插入的节点没人接管,数据地址永远换不成真实地址,所以一直停在灰块上。这一点先确认清楚,后面就不用反复试。

碰到「动态节点懒加载」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。

具体做法是,每插入一批新节点之后都要重新调用一次观察方法;用变动观察器来统一接管页面里后续新增的节点;实在接管不了的时候 就退回浏览器原生懒加载。

改完照着核一遍,滚动加载出来的每一屏图片都能正常显示,没有灰块残留下来。

作者 9823189