參考連接:javascript
懶加載和預加載html
懶加載的原理及實現java
處理圖片預加載時設置img的src屬性和img的onload事件的位置先後順序關係node
1、懶加載 緩存
var lazyLoad = (function(){ var clock; function init(){ //監聽瀏覽器滾動事件,持續滾動後停留200ms纔會觸發checkShow() $(window).on("scroll", function(){ if (clock) { clearTimeout(clock); } clock = setTimeout(function(){ checkShow(); }, 200); }) checkShow(); } function checkShow(){ $(".lazyload img").each(function(){ var $cur =$(this); //若某圖片已經顯示,則return if($cur.attr('isLoaded')){ return; } //若某圖片應該顯示卻還未顯示,則將其顯示出來 if(shouldShow($cur)){ showImg($cur); } }) } //判斷圖片是否應該顯示 function shouldShow($node){ var scrollH = $(window).scrollTop(), //窗口的垂直滾動條位置 winH = $(window).height(), //窗口高度 top = $node.offset().top; //圖片相對於整個文檔的偏移top座標 if(top < winH + scrollH){ return true; }else{ return false; } } //將圖片顯示出來 function showImg($node){ $node.attr('src', $node.attr('data-src')); $node.attr('isLoaded', true); } return { init: init } })() lazyLoad.init();
2、預加載 服務器
function loadImage(url, callback) { var img = new Image(); //建立一個Image對象,實現圖片的預下載 img.onload = function () { //圖片下載完畢時調用callback函數。 callback(img); }; img.src = url; };
function loadImage(url, callback) { var img = new Image(); //建立一個Image對象,實現圖片的預下載 img.onload = function () { //圖片下載完畢時將img.onload設爲null,並異步調用callback函數。 img.onload = null; callback(img); }; img.src = url; };