图片懒加载方案

文章介绍了三种图片懒加载的方法:使用scroll事件监听,通过getBoundingClientRect计算元素位置,以及利用IntersectionObserver接口。这些技术旨在优化网页性能,当图片进入视口时才加载,提高页面加载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、scroll事件监听

<img src="default.jpg" data-src="http://www.xxx.com/target.jpg" />
let img = document.getElementsByTagName("img");

let num = img.length;

let count = 0;//计数器,从第一张图片开始计

lazyload();//首次加载别忘了显示图片

window.addEventListener('scroll', throttle(lazyload, 300));//节流

function lazyload() {
  let viewHeight = document.documentElement.clientHeight;//视口高度

  let scrollHeight = document.documentElement.scrollTop || 

document.body.scrollTop;//滚动条卷去的高度

  for(let i = count; i <num; i++) {
    // 元素现在已经出现在视口中

    if(img[i].offsetTop < scrollHeight + viewHeight) {
      if(img[i].getAttribute("src") !== "default.jpg") continue;
      img[i].src = img[i].getAttribute("data-src");
      count ++;
   }
 }
}

二、getBoundingClientRect

function lazyload() {
  for(let i = count; i <num; i++) {
    // 元素现在已经出现在视口中

    if(img[i].getBoundingClientRect().top < 

document.documentElement.clientHeight) {
      if(img[i].getAttribute("src") !== "default.jpg") continue;
      img[i].src = img[i].getAttribute("data-src");
      count ++;
   }
 }
}

三、IntersectionObserver 

let img = document.getElementsByTagName("img");

const observer = new IntersectionObserver(changes => {
  //changes 是被观察的元素集合

  for(let i = 0, len = changes.length; i < len; i++) {
    let change = changes[i];
    // 通过这个属性判断是否在视口中

    if(change.isIntersecting) {
      const imgElement = change.target;
      imgElement.src = imgElement.getAttribute("data-src");
      observer.unobserve(imgElement);
   }
 }
})

Array.from(img).forEach(item => observer.observe(item));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值