图片懒加载 lazyLoad

图片懒加载

图片的延迟加载最常见的是只加载网页显示在屏幕中的图片,如果用户没有滚动到网页靠下的部分,那图片就不用显示了,节省HTTP请求和带宽,同时提高首屏的加载速度,提高用户体验。

具体思路是通过同一张图片占位,使用data-src 存储真实地址,然后在滚动时,判断element.offset().top <= $(window).height() + $(window).scrollTop(),如果符合条件,通过attr方法改变src,加载真实图片.

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>懒加载</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    ul {
      list-style: none;
    }

    img {
      height: 427px;
    }
  </style>
</head>

<body>
  <ul class="container">
    <li>
      <img src="http://via.placeholder.com/641x427" data-src='http://www.huaceys.com/images6/huacesheji_b_1.jpg'
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_2.jpg"
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_3.jpg"
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_4.jpg"
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_5.jpg"
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_6.jpg"
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_7.jpg"
        alt="">
    </li>
    <li>
      <img src="http://via.placeholder.com/641x427" data-src="http://www.huaceys.com/images6/huacesheji_b_8.jpg"
        alt="">
    </li>
  </ul>
  <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>

  <script>
    function start(params) {
      $('.container img:not([data-isLoaded])').each(function () {
        var $node = $(this)
        if (isShow($node)) {
          // 延迟500ms
          // setTimeout(() => {
          //   loadImg($node)
          // }, 500);
          
          loadImg($node)
        }
      })
    
    }
    // 返回判断结果
    function isShow($node) {
      // offsetTop 当前元素相对于其 offsetParent 元素的顶部的距离。
      // $(window).height() 浏览器窗口的视口的高度。
      // $(window).scrollTop() 是这个元素的顶部到它的最顶部可见内容(的顶部)的距离的度量。
      return $node.offset().top <= $(window).height() + $(window).scrollTop()
    }
    // 加载图片
    function loadImg($img) {
      $img.attr('src', $img.attr('data-src'))
      $img.attr('data-isLoaded', 1)
    }
    //初始化
    start()
    // 绑定事件
    $(window).on('scroll', function () {
      start()
    })
  </script>
</body>

</html>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容