天天看點

jQuery插件-Lazy Load延遲加載圖檔 jQuery插件-Lazy Load延遲加載圖檔

jQuery插件-Lazy Load延遲加載圖檔

Posted 2012-12-01  | 分類:  Web   jQuery   Linux   研發實踐     Web   jQuery 

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

在包含很多大圖檔長頁面中延遲加載圖檔可以加快頁面加載速度. 浏覽器将會在加載可見圖檔之後即進入就緒狀态. 在某些情況下還可以幫助降低伺服器負擔.

jQuery插件-Lazy Load延遲加載圖檔 jQuery插件-Lazy Load延遲加載圖檔

Lazy Load 靈感來自 Matt Mlinac 制作的 YUI ImageLoader 工具箱. 這是示範頁面.

這裡有幾個可用的 demo 頁面提供給那些匆忙的人參考: 基本選項, 淡入展示效果, script 腳本缺失的降級處理, 水準滾動, 容器内水準滾動, 容器内垂直滾動, 頁面記憶體在超多圖檔, 延時加載圖檔

檢視 demo 中每個請求間浏覽器緩存的内容. 你可以通過開發者控制台 (Chrome 和 Safari), Firebug (Firefox) 或者 HTTPHeaders (IE) 檢測到實際加載的内容.

怎樣使用?

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 的圖檔将被延遲加載. 可以參考基本選項 demo

占位圖檔

你還可以設定一個占位圖檔并定義事件來觸發加載動作. 這時需要為占位圖檔設定一個 URL 位址. 透明, 灰色和白色的 1x1 象素的圖檔已經包含在插件裡面.

事件觸發加載

事件可以是任何 jQuery 時間, 如: click 和 mouseover. 你還可以使用自定義的事件, 如: sporty 和 foobar. 預設情況下處于等待狀态, 直到使用者滾動到視窗上圖檔所在位置. 在灰色占位圖檔被點選之前阻止加載圖檔, 你可以這樣做:

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

設定敏感度

幾乎所有浏覽器的 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 });      

使用特效

how() 方法來将圖顯示出來. 其實你可以使用任何你想用的特效來處理. 下面的代碼使用 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 浏覽器上測試過.

個人部落格:http://demi-panda.com