1. 程式人生 > >jQuery延遲載入(懶載入)外掛 – jquery.lazyload.js

jQuery延遲載入(懶載入)外掛 – jquery.lazyload.js

Lazy Load 是一個用 JavaScript 編寫的 jQuery 外掛. 它可以延遲載入長頁面中的圖片. 在瀏覽器可視區域外的圖片不會被載入, 直到使用者將頁面滾動到它們所在的位置. 這與圖片預載入的處理方式正好是相反的.
在包含很多大圖片長頁面中延遲載入圖片可以加快頁面載入速度. 瀏覽器將會在載入可見圖片之後即進入就緒狀態. 在某些情況下還可以幫助降低伺服器負擔.

如何使用

Lazy Load 依賴於 jQuery. 請將下列程式碼加入HTML的結尾,也就是</body>前:

12<script type="text/javascript" src="jquery.js"></
script><script type="text/javascript" src="jquery.lazyload.js"></script>

你必須改變圖片的標籤。影象的地址必須放在data-original屬性上。給懶載入影象一個特定的class(例如:lazy)。這樣你可以很容易地進行影象外掛捆綁。程式碼如下:

1<img class="lazy" alt="" width="640" height="480" data-original="img/example.jpg" />
123$(function() {$("img.lazy").lazyload();
});

這將使所有 class 為 lazy 的圖片將被延遲載入.
Demo:基本選項

TIPS:這裡必須設定圖片的widthheight,否則外掛可能無法正常工作

設定臨界點

預設情況下圖片會出現在螢幕時載入. 如果你想提前載入圖片, 可以設定threshold 選項, 設定 threshold 為 200 令圖片在距離螢幕 200 畫素時提前載入.

123$("img.lazy").lazyload({threshold : 200});

設定事件來觸發載入

你可以使用jQuery事件,例如clickmouseover。也可以使用自定義事件,如sportyfoobar預設情況下是要等到使用者向下滾動並且影象出現在視口中時。只有當用戶點選它們才載入圖片:

123$("img.lazy").lazyload({event : "click"});

使用特效

預設情況下,外掛等待影象完全載入並呼叫show()。你可以使用任何你想要的效果。下面的程式碼使用fadeIn (淡入效果)。
Demo:淡入效果

123$("img.lazy").lazyload({effect : "fadeIn"});

針對不啟用JavaScript的情況

幾乎所有瀏覽器的 JavaScript 都是啟用的. 然而可能你仍希望能在不支援 JavaScript 的客戶端展示真實圖片. 當瀏覽器不支援 JavaScript 時優雅降級, 你可以將真實的圖片片段在寫 <noscript> 標籤內.

12<img class="lazy" data-original="img/example.jpg"  width="640" heigh="480"><noscript><img src="img/example.jpg" width="640" heigh="480"></noscript>

可以通過 CSS 隱藏佔位符.

123.lazy {display: none;}

在支援 JavaScript 的瀏覽器中, 你必須在 DOM ready 時將佔位符顯示出來, 這可以在外掛初始化的同時完成.

1$("img.lazy").show().lazyload();

圖片在容器裡面

你可以將外掛用在可滾動容器的圖片上, 例如帶滾動條的 DIV 元素. 你要做的只是將容器定義為 jQuery 物件並作為引數傳到初始化方法裡面.
Demo:容器內水平滾動容器內垂直滾動

當影象不連續時

滾動頁面的時候, Lazy Load 會迴圈為載入的圖片. 在迴圈中檢測圖片是否在可視區域內. 預設情況下在找到第一張不在可見區域的圖片時停止迴圈. 圖片被認為是流式分佈的, 圖片在頁面中的次序和 HTML 程式碼中次序相同. 但是在一些佈局中, 這樣的假設是不成立的. 不過你可以通過 failurelimit 選項來控制載入行為.

123$("img.lazy").lazyload({failure_limit : 10});

將 failurelimit 設為 10 ,令外掛找到 10 個不在可見區域的圖片時才停止搜尋. 如果你有一個猥瑣的佈局, 請把這個引數設高一點.

載入隱藏的圖片

可能在你的頁面上埋藏可很多隱藏的圖片. 比如外掛用在對列表的篩選, 你可以不斷地修改列表中各條目的顯示狀態. 為了提升效能, Lazy Load 預設忽略了隱藏圖片. 如果你想要載入隱藏圖片, 請將 skip_invisible 設為 false

123$("img.lazy").lazyload({ skip_invisible : false});

下載外掛

最新版本 原始碼壓縮程式碼. 外掛已經在 OSX 的 Safari 5.1, Safari 6, Chrome 20, Firefox 12 瀏覽器上, Windows 的 Chrome 20, IE 8 and IE 9 瀏覽器上, 以及 iOS5 (iPhone 和 iPad) 的 Safari 5.1 瀏覽器上測試過.

本人遇到的問題:

1.必須設定img的高度(如果為了統一,可設定  min-height),如果在容器中,必須固定容器的高度。

2. Dynamic generated image is requested twice when using jquery lazy loading in Google Chrome,在chrome下面動態生成的圖片,會被請求兩次,這個通過cache解決了

https://stackoverflow.com/questions/14504313/dynamic-generated-image-is-requested-twice-when-using-jquery-lazy-loading-in-goo

3.懶載入的三種實現方式 https://zhuanlan.zhihu.com/p/25455672 

4.angularjs 的懶載入https://github.com/Wyntau/me-lazyimg 

參考:1.官網 https://appelsiini.net/projects/lazyload/v1/

5.原始碼解析

 http://www.cnblogs.com/yangjunhua/p/3871763.html  

6.原始碼十八問

http://blog.csdn.net/liangklfang/article/details/50447555