zoukankan      html  css  js  c++  java
  • 图片懒加载实现

    现在网站页面内容越来越丰富,图片内容也越来越多,而图片过多会导致网页文件过大,从而引发加载缓慢的问题,而图片懒加载就是为解决这一问题而生。

    首先我们来讲Jquery的懒加载控件

     jQuery lazyload.JS

       jQuery lazyload.JS 地址:https://github.com/helijun/helijun/blob/master/plugin/lazyLoad/jquery.lazyload.js  直接复制源码到本地

       jQuery lazyload.JS是用 jQuery编写的一个控件,所以要运行 jQuery lazyload.JS必须先载入  jQuery

    1、请将下列代码加入</body>前: 

      <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
      <script type="text/javascript" src="jquery.lazyload.js"></script>
    2、首先图片大小必须设置,然后删除图片的src标签,将图片的地址放在data-original属性上,给懒加载图像一个特定的class(例如:lazy)
    代码如下:

      <img class="lazy" alt="" width="800" height="5000" data-original="img/lazy1.jpg" />

      $(function() {
         $("img.lazy").lazyload();
      });
    3、效果设置更改
       jQuery lazyload.JS在加载时有很多选项可以设置:
      1、设置临界点
        默认情况下图片是进入屏幕区域后再加载. 如果你想提前加载图片, 可以设置threshold 选项, 比如设置 threshold 为 150 令图片在距离屏幕 150 像素时提前加载.   
        $("img.lazy").lazyload({
           threshold : 200
        });
      2、事件触发加载
        也可以通过各类事件来触发加载,如点击事件:
        $("img.lazy").lazyload({
           event : "click"
        });
      3、特效加载
        默认是调用show()进行加载,你当然可以使用你想要的效果来实现。比如下面的代码使用fadeIn (淡入效果):    
        $("img.lazy").lazyload({
         effect : "fadeIn"
        });
      4、提前加载图片
        你也可以设定提前加载几张图片来提升网页浏览的连贯性,这由failure_limit的值来决定:    
        $("img.lazy").lazyload({
           failure_limit : 2
        });
      5、加载隐藏的图片
        Lazy Load 默认忽略了隐藏图片. 如果你想要加载隐藏图片, 请将 skip_invisible 设为 false:
        $("img.lazy").lazyload({
           skip_invisible : false
        });
    4、为了在某些浏览器或用户未启用JS或js控件加载失败的情况下实现优雅降级, 可以添加noscript标签,然后通过 CSS 先隐藏带控件的img元素,同时让控件执行成功时先运行show()方法将img元素显示出来,再运行懒加载.
    最后代码如下:

    <style type="text/css">
      img {
       100%;
      }
      .lazy{display: none;}
    </style>
    <img src="lun1.jpg" alt=""><br>
    <img src="lun2.jpg" alt=""><br>
    <img data-original="lun1.jpg" class="lazy" alt=""><br>
      <noscript><img src="lun1.jpg" alt=""></noscript>
    <img data-original="lun4.jpg" class="lazy" alt=""><br>
      <noscript><img src="lun4.jpg" alt=""></noscript>
    <img data-original="lun5.jpg" class="lazy" alt=""><br>
      <noscript><img src="lun5.jpg" alt=""></noscript>
    <img data-original="lun4.jpg" class="lazy" alt=""><br>
      <noscript><img src="lun4.jpg" alt=""></noscript>
    <img data-original="lun2.jpg" class="lazy" alt=""><br>
      <noscript><img src="lun2.jpg" alt=""></noscript>
    <img data-original="lun1.jpg" class="lazy" alt="">
      <noscript><img src="lun1.jpg" alt=""></noscript>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script src='jqueryLazyload.js'></script>
    <script type="text/javascript">
    $(function() {
      $("img.lazy").show().lazyload({
        effect:'fadeIn'
      });
    });

    </script>

    jq的懒加载大家看懂后,就可以尝试手动写懒加载效果:

    其实懒加载的原理非常的简单:初次加载页面时只加载用户能看到的图片,而其他的图片等用户需要看时再加载。

    首先将需要懒加载的图片先设置空的路径地址,并且设置display:none;让其隐藏;

      <img class="lazy" id='lazy1' alt="" src=""/>

      <img class="lazy" id='lazy2' alt="" src=""/>

      .lazy{display:none}

    这样在初次加载时由于路径为空,图片无法加载出来,并且因为图片被隐藏,所以也不会占用页面空间。

    那么接下来就是实现懒加载的js部分了,这里有两种方式,可以根据需求灵活使用:

    1、通过$(document).ready()方法,在页面加载完成后给图片添加路径,并取消隐藏:

      $(document).ready(function(){

        $('#lazy1').attr('src','/Template/xpshop_currents/Images/haohuiduo.jpg');

         $('#lazy1').show();

      })

    2、通过监听鼠标页面滚动距离来加载图片

      $(window).scroll(function(){

        $('#lazy2').attr('src','/Template/xpshop_currents/Images/jiazhi.jpg');//鼠标滚动立即加载
        if ($('#lazy2').offset().top - $(document).scrollTop()<1) {//鼠标滚动到合适的位置时将图片显示出来,可以设定自己想要的动画效果
          $('#lazy2').fadeIn();
        };
        $('#lazy3').attr('src','/Template/xpshop_currents/Images/weibu.jpg');
        if ($('#lazy3').offset().top - $(document).scrollTop()<1) {
          $('#lazy3').fadeIn();
        };
      })

     懒加载其实很简单,大家有没有看懂呢?
  • 相关阅读:
    Hadoop 2.7.3 完全分布式维护-简单测试篇
    PostgreSQL schema/table等大小查看
    Hadoop 2.7.3 完全分布式维护-部署篇
    java list map在初始化的时候添加元素
    js 立即执行函数
    vue 指令中el 的 parentNode 为空的问题
    elasticsearch must 和 should 并列的情况
    css animation动画使用
    css inline-block
    几种线程相关的map介绍
  • 原文地址:https://www.cnblogs.com/webwangjie/p/7193636.html
Copyright © 2011-2022 走看看