今天開始帶型帶秀專題 -- Lazy Load。先從使用比較普遍的 jQuery Lazy Load 插件開始,逐步深刻。該插件已經開發到了第二版,有興趣的同窗能夠去看一看。專題第二節會深刻到源碼。javascript
Github 地址html
Lazy Load用於延遲加載圖片。它會延遲加載視口外的圖片,直到用戶滾動頁面使其出現。與圖片預加載正好相反。java
在包含許多大圖片的長頁面上使用Lazy Load可以使頁面加載速度更快。在可視圖片加載後,瀏覽器將處於就緒狀態。某些狀況下也可幫助服務器減小負載。jquery
Lazy Load啓發於 Matt Mlinac 的 YUI ImageLoader。git
這裏有幾個demo可讓你快速體驗:basic options, with fadein effect, noscript fallback, page with gazillion images and load images using timeout.github
注意!查看新的demo時清除緩存。你可使用開發者工具(Chrome,Safari IE)或Firebug(Firefox)查看頁面實際加載的內容。shell
<!-- more -->
Lazy Load依賴於jQuery,在HTML中將其引入。npm
<script src="jquery.js"></script> <script scr="jquery.lazyload.js"></script>
引入腳本後,你還須要改變img
元素的的HTML代碼。添加data-original
屬性,其值爲所要加載圖片的URL。除此以外,推薦爲使用Lazy Load的圖片元素添加特定的class。這樣你能夠輕鬆的控制插件綁定到哪些圖片。瀏覽器
例如:緩存
<img class="lazy" data-original="img/example.jpg" width="640" height="400">
而後在腳本中添加:
$(function () { $("img.lazy").lazyload(); });
這將會使全部擁有lazy類名的圖片延遲加載。
注意!你必須經過
width
和height
屬性或者在CSS中爲圖片設置尺寸。不然插件不能正常工做。
默認狀況下,圖片出如今屏幕中時才被加載。若是你想提早加載圖片,可使用threshold
參數。以下面的代碼,將閥值設置爲 200 時,圖片會提早200像素被加載。
$('img.lazy').lazyload({ threshold: 200 });
你可使用jQuery事件,如click
或mouseover
;也可使用自定義事件,如sporty
或foobar
。默認的事件是用戶滾動且圖像出如今視口中。若是想讓用戶點擊時圖片纔會顯示,你能夠這樣作:
$('img.lazy').lazyload({ event: 'click' });
提示! 你可使用下面的技巧延遲加載圖像。下面的代碼會在頁面加載完畢後等待五秒加載圖像。See it working at delayed loading demo.
$(function() { $("img.lazy").lazyload({ event : "sporty" }); }); $(window).bind("load", function() { var timeout = setTimeout(function() { $("img.lazy").trigger("sporty") }, 5000); });
默認地,插件會在圖片徹底加載後調用show()
方法。固然你也能夠用你喜歡的效果。以下面的代碼使用了fadeIn
效果。Check how it works at effect demo page.
$("img.lazy").lazyload({ effect : "fadeIn" });
你也能夠爲滾動容器中的圖像應用此插件,例如帶可滾動的div元素。只須要將該容器元素做爲jQuery對象傳遞。這裏有一個 水平 和 垂直 容器的例子。
#container { height: 600px; overflow: scroll; } $("img.lazy").lazyload({ container: $("#container") });
頁面滾動後,插件會遍歷未加載的圖片。遍歷會檢查圖片是否變的可見。默認地,循環會在找到第一個視口外的圖像時中止。然而這是基於這樣的假設:頁面上圖像的順序與HTML代碼中順序相同。可是某些頁面的佈局不符合該假設。你能夠設置failure_limit
參數以控制加載行爲。
$("img.lazy").lazyload({ failure_limit : 10 });
將該參數設置爲10表示當在視口下方找到10個圖像時纔會中止遍歷圖像。若是你的佈局更加特別,能夠把該參數值調爲更高。最差的狀況是該值爲實際圖片的數量。
有時會有這樣的狀況出現,圖片在視口中在並非:visible
。爲了提升性能,你能夠選擇忽略.not(':visible')
的圖像。
$("img.lazy").lazyload({ skip_invisible : true });
HEADS UP! Webkit browsers will report images with without
width
andheight
as not.not(":visible")
. This causes images to appear only when you scroll a bit. Either fix your image tags or keepskip_invisible
asfalse
. Use this feature only if you know what you are doing.
你可使用bower
或者npm
安裝:
$ bower install jquery.lazyload $ npm install jquery-lazyload
(完)