什麼是LazyLoad技術?
在頁面上圖片比較多的時候,打開一張頁面必然引發與服務器大數據量的交互。尤爲是對於高清晰的圖片,佔了幾百K的空間。Lazy Load 是一個用 JavaScript 編寫的 jQuery 插件. 它能夠延遲加載長頁面中的圖片. 在瀏覽器可視區域外的圖片不會被載入, 直到用戶將頁面滾動到它們所在的位置. 這與圖片預加載的處理方式正好是相反的。
在包含不少大圖片長頁面中延遲加載圖片能夠加快頁面加載速度. 瀏覽器將會在加載可見圖片以後即進入就緒狀態. 在某些狀況下還能夠幫助下降服務器負擔,這樣勢必會引發速度上質的提高。
兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0其中safari和chrome部分功能不支持。
Lazy Load 靈感來自 Matt Mlinac 製做的 YUI ImageLoader 工具箱. 這是演示頁面。
原文的連接在:http://www.appelsiini.net/projects/lazyload
如今Lazy Load的版本已是1.8.1
下載地址: http://www.jb51.net/jiaoben/63757.html
實例下載:
下載聲明:
1. 注:此代碼僅供學習交流,請勿用於商業用途。
2. 注:此代碼僅供學習交流,請勿用於商業用途。
文件信息: 文件名: Lazy Load延遲加載圖片實例
文件Hash:dd3e435124e377c2da33344d442f85d1
文件大小:1.1 MB
文件上傳日期:2012 年 3 月 25 日
文件更新日期:2012 年 3 月 25 日
文件描述:在頁面上圖片比較多的時候,打開一張頁面必然引發與服務器大數據量的交互。尤爲是對於高清晰的圖片,佔了幾百K的空間。Lazy Load 是一個用 JavaScript 編寫的 jQuery 插件. 它能夠延遲加載長頁面中的圖片. 在瀏覽器可視區域外的圖片不會被載入, 直到用戶將頁面滾動到它們所在的位置. 這與圖片預加載的處理方式正好是相反的。
怎樣使用? 下面進入正題.Lazy Load 依賴於 jQuery. 請將下列代碼加入頁面 head 區域:javascript
複製代碼代碼以下:css
<script src="jquery.js" type="text/javascript"></script>
<script src="jquery.lazyload.js" type="text/javascript"></script>html
Lazy Load的使用方法十分簡單,但新版作了一些調整,必須修改<img>標籤的屬性。把<img>標籤中的 src 屬性改成等待圖片的URL, data-original 屬性填上真正的圖片URL.
以下:java
複製代碼代碼以下:jquery
<img class="lazy" src="img/grey.gif" data-original="img/example.jpg" width="640" heigh="480">chrome
建議:src中的等待圖片,最好使用1像素的單色圖片。
JS代碼以下:瀏覽器
複製代碼代碼以下:服務器
$("img.lazy").lazyload();app
這樣就能實現Lazy Load的效果了. Demo
看完Demo後,是否是以爲沒什麼效果出現?這個問題會在後面提到.
其實,並不是必定要使用它規定的 data-original 屬性來存放圖片URL.你也能夠本身定製別的屬性名,以下:
<img class="lazy" src="img/grey.gif" data-attr="img/example.jpg" width="640" heigh="480">
JS代碼以下:ide
複製代碼代碼以下:
$("img.lazy").lazyload({ data_attribute : "attr" });
只需設置 data_attribute 屬性爲對應的名稱便可. (注意:html代碼大小寫不敏感!因此 "data-" 後面只能跟小寫字母或數字.)
對於不支持JavaScript的瀏覽器,應該有相應的降級處理.
可使用<noscript>標籤,是用來定義在腳本未被執行時的替代內容/文本.並且這樣作還有一個好處,由於搜索引擎的爬蟲是不處理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;
}
JS代碼:
複製代碼代碼以下:
$("img.lazy").show().lazyload();
設置圖片加載的反應距離
Lazy Load插件默認的設置是:圖片在瀏覽器窗口上出現,就會觸發加載.但經過設置 threshold 屬性的值,能夠調整圖片的預先加載位置/距離.
複製代碼代碼以下:
$("img.lazy").lazyload({ threshold : 200 });
另外, threshold 能夠爲正數或者負數.正數是預先加載, 假設數值爲200, 則圖片距離出現到屏幕還有 200px 時,就開始加載.若是是負數,則相反.假設數值爲-200時,則圖片已經在窗口出現,而且距離瀏覽器視窗底部的距離爲 200px 時,纔開始加載.
PS:圖片和屏幕的距離是根據圖片的 top 位置計算.
注意:threshold的設置須要考慮網站的長度和圖片的高度,若是數值過大則會致使沒法加載的問題.建議數值設置不要超過相應圖片高度的一半.
經過事件觸發加載
能夠經過jQuery定義的事件來觸發加載,也可使用本身定義的事件.
複製代碼代碼以下:
$("img.lazy").lazyload({
event : "click"
});
實現動畫效果
上面的Demo之因此會沒有圖片加載的效果,是由於Lazy Load默認的圖片加載是經過 jQuery 的show()方法來顯示,因此圖片出現幾乎是一瞬間.固然咱們還能夠實現其餘效果.
複製代碼代碼以下:
$("img.lazy").lazyload({
effect : "fadeIn"
});
另外還可使用 slideDown() 方法,但效果不佳.
若是想要控制動畫的速度,還能夠修改 effectspeed 屬性.
複製代碼代碼以下:
$("img.lazy").lazyload({
effect : "fadeIn",
effectspeed : 1000
});
effectspeed 屬性默認是空的,因此若是不設置它,動畫的時間爲400毫秒.
Container容器屬性
當要延遲加載的圖片全擺在一個容器中.只需把 container 屬性指向擺放 img 的容器的對象.
css代碼:
複製代碼代碼以下:
#container {
height: 600px;
overflow: scroll;
}
js代碼:
複製代碼代碼以下:
$("img.lazy").lazyload({
container: $("#container")
});
廢話很少說,直接看Demo ,不單豎着的能夠, 橫着也行Demo .
failure_limit的屬性
Lazy Load 有一個循環查找 img 的機制.根據 HTML 文檔的佈局從上往下查找,當找到第一個並未顯示/加載的 img 時,就會中止往下查找.(其實就是對 $("img.lazy") 這個對象(組)進行順序查找)
那這個 failure_limit 的屬性有什麼用呢?
如今網站設計時,都會用到大量的定位樣式,如: float 和 position , 這樣在瀏覽器呈現的佈局效果和 HTML 文檔中的 DOM 順序有很大差別.
這樣就會存在一種狀況,某 <img> 標籤已出如今屏幕上,但它卻沒法顯示!! 由於它在 HTML 文檔中的實際位置排在了那些尚未顯示的 <img> 標籤後面, 這樣會致使顯示在屏幕上的這個 <img> 標籤沒法加載相應的圖片.當Lazy Load 在找到第一個未顯示的 <img> 標籤時,查找已經被終止了, 並無繼續往下遍歷.
因此這個時候,就可使用failure_limit屬性.
複製代碼代碼以下:
$("img.lazy").lazyload({
failure_limit : 10
});
這樣 Lazy Load 會查找到第10個未顯示的<img>標籤處.當在圖片多且佈局複雜的頁面時, failure_limit 的做用就很大了.
原文還舒適提示:If you have a funky layout set this number to something high. 若是你的網站佈局很"變態",建議把該值調得更高.
延遲下載圖片
能夠經過自定義事件,而後經過 setTimeout 來設置延遲觸發該事件.
複製代碼代碼以下:
$(function() {
$("img:below-the-fold").lazyload({
event : "sporty"
});
});
$(window).bind("load", function() {
var timeout = setTimeout(function() {$("img.lazy").trigger("sporty")},5000);
});
主要原理是,當 event 被設置爲 scroll 之外的事件時, 實際上都會綁定了一個內置的 "appear" 事件.顧名思義, 這個事件就是用來顯示圖片的. (其實 scroll 也是調用這個事件)
skip_invisible 加載不可見的圖片
Lazy Load 插件默認對隱藏的圖片不加載(例如 display:none ). 這樣作有助於性能的優化.若是但願連隱藏的圖片一塊兒加載,則能夠把 skip_invisible 設爲 false .
複製代碼代碼以下:
$("img.lazy").lazyload({ skip_invisible : false });