lazyload懶加載的使用


1.引用<script src="http://a.tbcdn.cn/apps/baron/js/??lib/tmm/tmm.js,lib/lazyload/lazyload.js?20121015"></script>

2.對於要懶加載的圖片進行如下屬性設置。<img src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://img03.taobaocdn.com/tps/i3/T1xl4_FlFaXXcLmU_5-305-317.png" />

其中src為未加載時的圖片,dataimg為實際要加載的圖片。

3.執行lazyload.init();

4.分tab的懶加載。判斷tab把下面的圖片有沒加載過。根據loaded屬性判斷,還要對非當前tab所屬的圖片進行class lazy去掉。對已加載的loaded為true的圖片,不加lazy屬性

5.注意lazyload.init()的執行時機,如果在dom ready階段執行,會下載所有圖片,不能實現懶加載。要在winow.onload完成這個階段去執行。

lazyload.js代碼解讀:

/**
 * 基於jQuery或者zeptoJS的惰性加載
 */
var lazyload = {
  init : function(opt){
    var that = this;
    var op = {
        anim: true,
        extend_height:400
    };
    // 合並對象,已有的{anim:true}+用戶自定義對象。也就是op = op + opt
    $.extend(op,opt);
    // 調用lazyload.img.init(op)函數
    that.img.init(op);

  },

  img : {
    init : function(n){

      var that = this;
      console.log(n);

      // 要加載的圖片是不是在指定窗口內
      function inViewport( el ) {
          // 當前窗口的頂部
        var top = window.pageYOffset
        // 當前窗口的底部
        var btm = window.pageYOffset + window.innerHeight
        // 元素所在整體頁面內的y軸位置
        var elTop = $(el).offset().top;
        // 判斷元素,是否在當前窗口,或者當前窗口延伸400像素內
        return elTop >= top && elTop - n.extend_height <= btm
      }

      // 滾動事件里判斷,加載圖片
       $(window).bind('scroll', function() {
          $('img.lazy').each(function(index,node) {
            var $this = $(this)
            if(!$this.attr('dataimg')){
              return
            }
            if ( !inViewport(this) ) return
            act($this)

          })
        }).trigger('scroll')

       // 展示圖片
       function act(_self){
              // 已經加載過了,則中斷后續代碼
           if (_self.attr('loaded')) return;
            var img = new Image(), original = _self.attr('dataimg')
            // 圖片請求完成后的事件,把dataimg指定的圖片,放到src里面,瀏覽器顯示
            img.onload = function() {
                _self.attr('src', original).removeClass('lazy');
                n.anim && _self.css({ opacity: .2 }).animate({ opacity: 1 }, 280);
            }
            // 當你設置img.src的時候,瀏覽器就在發送圖片請求了
            original && (img.src = original);
             _self.attr('loaded', true);
       }
    }
  }
};

2015年6月30日添加用例

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

    <head>
        <meta charset="UTF-8" />
        <title>懶加載實例</title>
        <style type="text/css">
        /*一定要有預先高度*/
            img{
                width: 600px;
                height: 260px;
            }
        </style>
    </head>

    <body>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/11de79502d0af.jpg!v1sell" alt="" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/33f99f823ed3d.jpg!v1sell" alt="" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/680120973b82.jpg!v1sell" alt="" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/67f87ba08cf0.jpg!v1sell" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/22ec075a17c33.jpg!v1sell" alt="" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/2e4a699680788.jpg!v1sell" alt="" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/c2f4043a4991.jpg!v1sell" alt="" />
        </div>
        <div>
            <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/33f996b4386ab.jpg!v1sell" alt="" />
        </div>
    </body>
    <script src="jquery-2.1.4.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        var lazyload = {
          init : function(opt){
            var that = this,
            op = {
                anim: true,
                extend_height:0,
                selectorName:"img",
                realSrcAtr:"dataimg"
            };
            // 合並對象,已有的{anim:true}+用戶自定義對象。也就是op = op + opt
            $.extend(op,opt);
            // 調用lazyload.img.init(op)函數
            that.img.init(op);
        
          },
        
          img : {
            init : function(n){
        
              var that = this,
              selectorName = n.selectorName,
              realSrcAtr = n.realSrcAtr,
              anim = n.anim;
//              console.log(n);
        
              // 要加載的圖片是不是在指定窗口內
              function inViewport( el ) {
                  // 當前窗口的頂部
                var top = window.pageYOffset,
                // 當前窗口的底部
               btm = window.pageYOffset + window.innerHeight,
                // 元素所在整體頁面內的y軸位置
               elTop = $(el).offset().top;
                // 判斷元素,是否在當前窗口,或者當前窗口延伸400像素內
                return elTop >= top && elTop - n.extend_height <= btm;
              }
        
              // 滾動事件里判斷,加載圖片
               $(window).on('scroll', function() {
                  $(selectorName).each(function(index,node) {
                    var $this = $(this);
                    
                    if(!$this.attr(realSrcAtr) || !inViewport(this)){
                      return;
                    }
                   
                    act($this);
        
                  })
                }).trigger('scroll');
        
               // 展示圖片
               function act(_self){
                      // 已經加載過了,則中斷后續代碼
                   if (_self.attr('lazyImgLoaded')) return;
                    var img = new Image(), 
                    original = _self.attr('dataimg');
                    // 圖片請求完成后的事件,把dataimg指定的圖片,放到src里面,瀏覽器顯示
                    img.onload = function() {
                        _self.attr('src', original);
                        anim && _self.css({ opacity: .2 }).animate({ opacity: 1 }, 280);
                    };
                    // 當你設置img.src的時候,瀏覽器就在發送圖片請求了
                    original && (img.src = original);
                     _self.attr('lazyImgLoaded', true);
               }
            }
          }
        };
        
        /*
         * selectorName,要懶加載的選擇器名稱
         * extend_height  擴展高度
         * anim  是否開啟動畫
         * realSrcAtr  圖片真正地址*/
        lazyload.init({
            anim:false,
            selectorName:".samLazyImg"
        });
    </script>

</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM