Intersection Observer配置错,懒加载失效!
💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
Intersection Observer配置错,懒加载失效!
目录
凌晨三点改懒加载,图片死活不加载。元素明明在屏幕里,控制台没报错,以为是网络问题。一查代码,发现Intersection Observer配置写成狗。
核心根源
rootMargin设成'-50px',但root没写。导致计算逻辑崩了。
rootMargin是相对于root的偏移量。root默认是视口(viewport),-50px意思是:元素要移出视口50px才触发。
但元素在视口内时,isIntersecting始终false。懒加载直接失效。
错误代码(真实踩坑现场)
constobserver=newIntersectionObserver((entries)=>{entries.forEach(entry=>{if(entry.isIntersecting){// 这里永远进不来!entry.target.src=entry.target.dataset.src;}});},{rootMargin:'-50px'// 重点!负值坑死人});正确代码(秒级修复)
constobserver=newIntersectionObserver((entries)=>{entries.forEach(entry=>{if(entry.isIntersecting){// 元素在视口内触发constimg=entry.target;img.src=img.dataset.src;// 图片地址在data-src属性img.onload=()=>observer.unobserve(img);// 加载完移除观察}},{root:null,// 显式写null,避免歧义(默认就是null,但写上更安全)rootMargin:'0px'// 0px是黄金标准!别乱设负值});为什么0px最安全?
rootMargin: '0px':元素进入视口时触发(懒加载需求)。-50px:元素移出视口50px才触发(完全反了!)。- root不设:默认是视口。设root为null才是标准用法。
避坑总结
- rootMargin别碰负值。0px起步,调成
50px才加偏移。 - root必须写
null(即使默认是null)。代码可读性拉满,避免后续坑。 - 加载完记得
unobserve。不移除会反复触发,CPU哭死。 - 测试时先用
rootMargin: '0px'。别一上来就整花活。
调试时差点把键盘砸了。懒加载不是魔法,配置错了,图片就和你玩消失。
记住:Intersection Observer的rootMargin是偏移量,不是触发距离。
下次写代码,先写root: null, rootMargin: '0px',再加细节。省时省力。
(字数:688)
