当前位置:首页 > 知识库 > 正文内容

网站图片使用懒加载用于提高网站的访问速度

9个月前 (08-18)知识库517

代码使用方法也及其简单

默认的图片在代码中输出的格式是<img src="" alt="">只需要将代码中的src=""修改为data-src=""即可。

网站图片使用懒加载用于提高网站的访问速度

使用的时候多尝试,在banner或者是Logo出尽量不要使用或者是网站开屏就能看到的图片的地方少用可能会引起错误。

以下是完整的图片懒加载源码

<script>
  $(document).ready(function() {
    function isElementInViewport(el) {
      var rect = el.getBoundingClientRect();
      return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
        rect.right <= (window.innerWidth || document.documentElement.clientWidth)
      );
    }

    function lazyLoadImages() {
      $('img[data-src]').each(function() {
        if (isElementInViewport(this)) {
          $(this).attr('src', $(this).data('src'));
          $(this).removeAttr('data-src');
        } else {
          $(this).attr('src', '/skin/images/placeholder.gif');
        }
      });
    }

    $(window).on('scroll', lazyLoadImages);
    lazyLoadImages();
  });
</script>

以上代码中的/skin/images/placeholder.gif为占位符,将占位符修改为你自己的即可,主要作用是在图片没有加载完成或者是图片加载错误时显示这张图片,否则会直接显示错误信息降低网站体验度。

需要注意的是以上代码需要配合jquery-3.6.0.min.js一起使用,否则不生效,其他版本的jquery没有尝试过请自行尝试。

这是使用IntersectionObserver API和requestAnimationFrame的优化版本。

<script>
  $(document).ready(function() {
    var lazyImages = [].slice.call(document.querySelectorAll("img[data-src]"));
    var imageObserver = new IntersectionObserver(function(entries, observer) {
      entries.forEach(function(entry) {
        if (entry.isIntersecting) {
          var lazyImage = entry.target;
          lazyImage.src = $(lazyImage).data('src');
          $(lazyImage).removeAttr('data-src');
          imageObserver.unobserve(lazyImage);
        }
      });
    });

    lazyImages.forEach(function(lazyImage) {
      lazyImage.src = '/skin/images/placeholder.gif';
      imageObserver.observe(lazyImage);
    });
  });
</script>

第三次优化版,使用了本地缓存功能避免重复的请求资源。

<script>
  $(document).ready(function() {
    function isElementInViewport(el) {
      var rect = el.getBoundingClientRect();
      return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
        rect.right <= (window.innerWidth || document.documentElement.clientWidth)
      );
    }

    function lazyLoadImages() {
      $('img[data-src]').each(function() {
        var cachedSrc = localStorage.getItem($(this).data('src'));
        if (cachedSrc) {
          $(this).attr('src', cachedSrc);
          $(this).removeAttr('data-src');
        } else if (isElementInViewport(this)) {
          $(this).attr('src', $(this).data('src'));
          $(this).removeAttr('data-src');
          var img = new Image();
          img.src = $(this).data('src');
          img.onload = function() {
            localStorage.setItem($(this).data('src'), $(this).data('src'));
          }.bind(this);
        } else {
          $(this).attr('src', '/skin/images/placeholder.gif');
        }
      });
    }
    $(window).on('scroll', lazyLoadImages);
    lazyLoadImages();
  });
</script>

这是第四版的修改,取消了占位符增加了延迟加载,主要是经过测试后占位符不是那么美观,但是又不能影响效果。

<script>
$(document).ready(function() {
  var cachedImages = {};
  var preloadBuffer = 200;

  function isElementInViewport(el) {
    var rect = el.getBoundingClientRect();
    return (
      rect.top >= 0 &&
      rect.left >= 0 &&
      rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
      rect.right <= (window.innerWidth || document.documentElement.clientWidth)
    );
  }

  function loadImage($image, dataSrc) {
    if (cachedImages[dataSrc]) {
      $image.attr('src', cachedImages[dataSrc]);
      $image.removeAttr('data-src');
    } else {
      $image.attr('src', dataSrc);
      $image.removeAttr('data-src');

      var img = new Image();
      img.src = dataSrc;
      img.onload = function() {
        cachedImages[dataSrc] = dataSrc;
        localStorage.setItem(dataSrc, dataSrc);
      };
    }
  }

  var observer = new IntersectionObserver(function(entries, observer) {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        var $image = $(entry.target);
        var dataSrc = $image.data('src');
        loadImage($image, dataSrc);
        observer.unobserve(entry.target);
      }
    });
  }, { rootMargin: preloadBuffer + 'px' });

  $('img[data-src]').each(function() {
    observer.observe(this);
  });

  $(window).on('scroll', function() {
    $('img[data-src]').each(function() {
      var $image = $(this);
      var dataSrc = $image.data('src');
      if (isElementInViewport(this)) {
        loadImage($image, dataSrc);
      }
    });
  });
});
</script>

需要根据你的实际情况进行一些调整。在图片加载完成后添加一些过渡效果,或者在图片加载失败时添加一些错误处理等。

扫描二维码推送至手机访问。

版权声明:本文由康斯网发布,如需转载请注明出处。

本文链接:https://www.ksnet.vip/knowledge/24.html

“网站图片使用懒加载用于提高网站的访问速度” 的相关文章

火车采集器7.6教程:从入门到高级

火车采集器7.6教程:从入门到高级

这套课程是搜外网提供的火车采集教程,涵盖了从入门到高级的内容,非常全面。在课程中,我们将使用火车采集器7.6这款软件。火车采集器7.6是一款功能强大的软件工具,专门用于数据采集和抓取。它提供了丰富的功能和工具,让用户能够轻松地从各种网站上获取所需的数据。无论你是需要采集商品信息、新闻、论坛帖子还是其...

前端静态资源CDN库推荐

前端静态资源CDN库推荐

静态资源 CDN 公共库是指一些服务商把我们常用的 JavaScript 库放在网上,方便开发者直接用,并且还提供 CDN 加速。这样可以加快用户访问这些资源的速度,同时也可以减少自己服务器的流量消耗。目前国内的 CDN 主要同步的资源来自于 https://cdnjs.com/也就是说,如果你成功...

火车采集器常用正则表达式(高铁采集器正则表达式)

火车采集器常用正则表达式(高铁采集器正则表达式)

匹配标题中所有的标点符号[^\w\s\。\?\!\.\?\!]匹配所有带&字面字符,[a-z]匹配大小写&[a-z]+;匹配手机号码带国际区号的、不带国际区号的、带"-"分隔符的等等(\+?86)?1[3-9]\d{1,2}-?\d{4}-?\d{4}匹配国内的座...

各大银行的SWIFT/BIC代码

各大银行的SWIFT/BIC代码

SWIFT/BIC代码是由Society for Worldwide Interbank Financial Telecommunication(全球银行间金融电信协会,简称SWIFT)定义的一种标准格式的银行标识符代码(Bank Identifier Codes,简称BIC)。SWIFT代码也被称...