前端图片懒加载的实现

395 阅读2分钟
  1. 添加占位符

首先,我们需要让页面在调用图片之前呈现出一张占位图像,防止未加载的图片挤压其他元素导致排版错乱等问题。

例如,在HTML 中要加载图片的img 元素上添加一个默认的占位符图片,一般采用分辨率比较小和简单格式的图片极其占位符图片资源内容不能为空态路径或透明的SVG文件:

 <img 
   src="https://example.com/placeholder.svg" 
   data-src="https://example.com/img.jpg" 
   alt="描述图片的文字">
 ```

2. 加载图片

当页面触发相应的事件如滚动窗口、滚动条操作传入图片可见视区时,在相应的Javascript 监听器执行的初始化过程中规定对于window的头部判断从而进行因lazyloading的检查图片是否再可视范围内。
如检测元素是否出现在可视区域,当元素出现在用户可见区域内,才将占位图像替换成原本的图片。这里是一个基本的实现示例:

```javascript
    const images = document.querySelectorAll('img[data-src]');
    const loadImages = (image) => {
      image.setAttribute('src', image.getAttribute('data-src'));
      image.onload = () => {
        image.removeAttribute('data-src');
      };
    };
    
 function handleIntersection(entries, observer) {
   entries.forEach((entry) => {
     if (entry.intersectionRatio > 0) {
       observer.unobserve(entry.target);
       loadImages(entry.target);
     }
   });
 }

 function createObserver() {
   const options = {
     rootMargin: '25px',
     threshold: 0.01,
   };

   const observer = new IntersectionObserver(handleIntersection, options);

   images.forEach((image) => {
     observer.observe(image);
   });
 }

window.addEventListener('DOMContentLoaded', createObserver);
  1. 其它优化

实现图片懒加载后,还可以通过一些额外的优化来进一步提高网站性能和用户体验,具体如下:

  • 浏览器缓存:浏览器缓存可以减少对服务器的请求,提高页面的加载速度。
  • 响应式图片选型 : 对于适应百分比布局,基于设备类型等纬度指定更多种小米与大图之类的图片类型,可在不同的设备上进行优化以加快显示速度和减少网络带宽消耗。
  • WebP 图片格式:使用WebP图片格式的文件大小较小,下载速度较快,可以进一步提高用户体验。
  • 低分辨率图像预加载:可以在设备初始加载视角之前,提前加载或展示低分辨率的缩略图;以节省请求时间并为获取放大版本的图片创造一个协调的视觉设置。

综上所述,通过应用懒加载技术,可以大大减少页面的加载时间和网络负荷,为用户提供更好的体验。除此之外还需要进行一系列优化措施以使其保持完美状态,优化用户体验,让用户可以快速获得所需内容。