Lazy Load, 延遲加載圖片的 jQuery 插件

本文翻譯自 Lazy Load Plugin for jQuery, 介紹一個 jQuery 插件, 它提供懶漢式加載頁面圖片的功能.javascript

Lazy Load 是一個用 JavaScript 編寫的 jQuery 插件. 它能夠延遲加載長頁面中的圖片. 在瀏覽器可視區域外的圖片不會被載入, 直到用戶將頁面滾動到它們所在的位置. 這與圖片預加載的處理方式正好是相反的.html

在包含不少大圖片長頁面中延遲加載圖片能夠加快頁面加載速度. 瀏覽器將會在加載可見圖片以後即進入就緒狀態. 在某些狀況下還能夠幫助下降服務器負擔.java

jQuery Lazy Load 圖片延遲加載插件

Lazy Load 靈感來自 Matt Mlinac 製做的 YUI ImageLoader 工具箱. 這是演示頁面.jquery

這裏有幾個可用的 demo 頁面提供給那些匆忙的人蔘考: 基本選項淡入展現效果script 腳本缺失的降級處理水平滾動容器內水平滾動容器內垂直滾動頁面內存在超多圖片延時加載圖片git

查看 demo 中每一個請求間瀏覽器緩存的內容. 你能夠經過開發者控制檯 (Chrome 和 Safari), Firebug (Firefox) 或者 HTTPHeaders (IE) 檢測到實際加載的內容.github

怎樣使用?

Lazy Load 依賴於 jQuery. 請將下列代碼加入頁面 head 區域:瀏覽器

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

你必須修改 HTML 代碼. 在 src 屬性中設置展位符圖片, demo 頁面使用 1x1 像素灰色 GIF 圖片. 而且須要將真實圖片的 URL 設置到 data-original 屬性. 這裏能夠定義特定的 class 以得到須要延遲加載的圖片對象. 經過這種方法你能夠簡單地控制插件綁定.緩存

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

處理圖片的代碼以下.服務器

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

這將使全部 class 爲 lazy 的圖片將被延遲加載. 能夠參考基本選項 demoapp

設置敏感度

幾乎全部瀏覽器的 JavaScript 都是激活的. 然而可能你仍但願能在不支持 JavaScript 的客戶端展現真實圖片. 當瀏覽器不支持 JavaScript 時優雅降級, 你能夠將真實的圖片片斷在寫 <noscript> 標籤內.

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

能夠經過 CSS 隱藏佔位符.

.lazy {   display: none; }

在支持 JavaScript 的瀏覽器中, 你必須在 DOM ready 時將佔位符顯示出來, 這能夠在插件初始化的同時完成.

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

這些都是可選的, 但若是你但願插件平穩降級這些都是應該作的.

設置敏感度

默認狀況下圖片會出如今屏幕時加載. 若是你想提早加載圖片, 能夠設置 threshold 選項, 設置 threshold 爲 200 令圖片在距離屏幕 200 像素時提早加載.

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

佔位圖片

你還能夠設定一個佔位圖片並定義事件來觸發加載動做. 這時須要爲佔位圖片設定一個 URL 地址. 透明, 灰色和白色的 1x1 象素的圖片已經包含在插件裏面.

事件觸發加載

事件能夠是任何 jQuery 時間, 如: click 和 mouseover. 你還可使用自定義的事件, 如: sporty 和 foobar. 默認狀況下處於等待狀態, 直到用戶滾動到窗口上圖片所在位置. 在灰色佔位圖片被點擊以前阻止加載圖片, 你能夠這樣作:

$("img").lazyload({ 	placeholder : "img/grey.gif", 	event : "click" });

使用特效

當圖片徹底加載的時候, 插件默認地使用 show() 方法來將圖顯示出來. 其實你可使用任何你想用的特效來處理. 下面的代碼使用FadeIn 效果. 這是效果演示頁面.

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

圖片在容器裏面

你能夠將插件用在可滾動容器的圖片上, 例如帶滾動條的 DIV 元素. 你要作的只是將容器定義爲 jQuery 對象並做爲參數傳到初始化方法裏面. 這是水平滾動演示頁面垂直滾動的演示頁面.

#container {     height: 600px;     overflow: scroll; }
$("img.lazy").lazyload({               container: $("#container") });

當圖片不順序排列

滾動頁面的時候, Lazy Load 會循環爲加載的圖片. 在循環中檢測圖片是否在可視區域內. 默認狀況下在找到第一張不在可見區域的圖片時中止循環. 圖片被認爲是流式分佈的, 圖片在頁面中的次序和 HTML 代碼中次序相同. 可是在一些佈局中, 這樣的假設是不成立的. 不過你能夠經過 failurelimit 選項來控制加載行爲.

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

將 failurelimit 設爲 10 令插件找到 10 個不在可見區域的圖片是才中止搜索. 若是你有一個猥瑣的佈局, 請把這個參數設高一點.

延遲加載圖片

Lazy Load 插件的一個不完整的功能, 可是這也能用來實現圖片的延遲加載. 下面的代碼實現了頁面加載完成後再加載. 頁面加載完成 5 秒後, 指定區域內的圖片會自動進行加載. 這是延遲加載演示頁面.

$(function() {               $("img:below-the-fold").lazyload({         event : "sporty"     }); }); $(window).bind("load", function() {      var timeout = setTimeout(function() {$("img.lazy").trigger("sporty")}, 5000); });

加載隱藏的圖片

可能在你的頁面上埋藏可不少隱藏的圖片. 好比插件用在對列表的篩選, 你能夠不斷地修改列表中各條目的顯示狀態. 爲了提高性能, Lazy Load 默認忽略了隱藏圖片. 若是你想要加載隱藏圖片, 請將 skip_invisible 設爲 false

$("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 瀏覽器上測試過.

相關文章
相關標籤/搜索