犀利的lazyLoad,求js高手鑒定


   最一段代碼,是一段原生的圖片加載器,可以實現如下功能,就目前自認為最牛X的頁面圖片加載器,已經過京東首頁測試,IE6 7 8,chrome ,

ff完美測試通過.

  先說下它到底NB在哪里,

  1.原生js實現,客戶端性能NB.,不依靠任何框架.

  2.可以支持兩種方式的圖片加載

    <img src="images/blank.png" data-src="images/abstract_brushes.jpg" data-defer="5000"/>
    <img src="images/blank.png" data-src="images/abstract_lake.jpg" />

 第一種方式表示這個圖片在dom加載完畢過后,圖片會在5S后才請求,第二種沒有deta-defer參數的表示圖片是滾動加載的,如果圖片出來在可視范圍

內會自動加載.延遲5000的前提條件是我的這段js代碼放在body之前,緊靠body

 3.在bind scoll事件的時候不會平凡觸發加載圖片,中間會有個時間戳,這一步大大提升性能,不會因為用戶的不停滾動,而照成客戶端性能問題,

 4. 凡是已經加載過得圖片,都不會再次去遍歷,這一步大大提升性能

 5. 在scoll事件中所有得圖片都加載完畢了,后自動清除scroll事件,

 6. 調用之簡單,nothingLazyLoad();就可以實現網站上所有得圖片lazyLoad,默認可以傳一個時間參數,如nothingLazyLoad(2000),表示這個頁面

的所有圖片都會在2000s以某種方式加載,其中就是上面第二點得2種方式加載,

   接下來測試下京東首頁的圖片用我的loazLoad,那是什么效果,一個字犀利加效率,我的這個lazyLoad屬於作者個人心得所悟,占不貼我的

  源碼,只有測試代碼, 我把京東網站上自帶的jQuery的  lazyLoad貼出來,然后刪除掉,用我的,

   

function lazyload(option) {
    var settings = {
        defObj: null,
        defHeight: 0
    };
    settings = $.extend(settings, option || {});
    var defHeight = settings.defHeight,
        defObj = (typeof settings.defObj == "object") ? settings.defObj.find("img") : $(settings.defObj).find("img");
    var pageTop = function () {
            var d = document,
                y = (navigator.userAgent.toLowerCase().match(/iPad/i) == "ipad") ? window.pageYOffset : Math.max(d.documentElement.scrollTop, d.body.scrollTop);
            return d.documentElement.clientHeight + y - settings.defHeight
        };
    var imgLoad = function () {
            defObj.each(function () {
                if ($(this).offset().top <= pageTop()) {
                    var src2 = $(this).attr("src2");
                    if (src2) {
                        $(this).attr("src", src2).removeAttr("src2")
                    }
                }
            })
        }; 
imgLoad();
 $(window).bind("scroll", function () { imgLoad() }) }

    以上代碼是他首頁里面的,我只是貼出來,然后把他刪掉,用我的lazyLoad,然后我會改掉他首頁img標簽的參數形式,用我這個組件肯定得按照我的

 參數形式寫img標簽,兩種不同的加載方式,已列在優勢第二點,可以在一個頁面混合使用,比如一個圖片切換里面的所有圖片,

 顯然是使用第一種參數形式,

   好了,廢話不多說,上測試連接地址,性能NB那才叫NB.我的這個京東測試demo是兩種方法混合使用的,你會看到有得圖片會在7 8s后才會請求

   測試地址:① nothingDemo1nothingDemo2

   是不是瀏覽起來很順暢,很NB的加載,其中demo中data-defer方式加載的圖片有logo,還有中間一點的圖片,大概是7 8s后才請求,其余圖片

大概都是滾動加載或者出現在可視范圍自動加載.我的實現代碼屬於個人作品,贊不公布,請大家諒解.但是上面我提供的六點優勢已經把思路

說的很清楚了.

    如果能看懂這段代碼js的高手,忘指教,求留言.

    代碼肯定在demo里面,想看的話自己找了.

 

  

  


免責聲明!

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



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