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:這裡必須設定圖片的width
和height
,否則外掛可能無法正常工作。
設定臨界點
預設情況下圖片會出現在螢幕時載入. 如果你想提前載入圖片, 可以設定threshold
選項, 設定 threshold 為 200 令圖片在距離螢幕 200 畫素時提前載入.
123 | $( "img.lazy" ).lazyload({ threshold : 200 }); |
設定事件來觸發載入
你可以使用jQuery事件,例如click
和mouseover
。也可以使用自定義事件,如sporty
、foobar
預設情況下是要等到使用者向下滾動並且影象出現在視口中時。只有當用戶點選它們才載入圖片:
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