本文實例講述了Jquery實作圖片預先載入與延時載入的方法。分享給大家供大家參考。具體分析如下:
有很多項目經常會需要判斷圖片加載完成後執行相應的操作,或者需要圖片延遲加載,網上雖然已經有很不錯的插件,但要為這些效果還得單獨加載一個插件的話總感覺有點不舒服,乾脆自己寫了個方法:
複製程式碼
程式碼如下:
function loadimg(arr,funLoading,funOnLoad,funOnErrorad,funOnError){
numError=0,
isObject=Object.prototype.toString.call(arr)==="[object Object]" ? true : false;
var arr=isObject ? arr.get() : arr;
for(a in arr){
var src=isObject ? $(arr[a]).attr("data-src") : arr[a];
preload(src,arr[a]);
}
function preload(src,obj){
var img=new Image();
img.onload=function(){
numLoaded ;
funLoading && funLoading(numLoaded,arr.length,src,obj);
funOnLoad && numLoaded==arr.length && funOnLoad(numError);
};
img.onerror=function(){
numLoaded ;
numError ;
funOnError && funOnError(numLoaded,arr.length,src,obj);
}
img.src=src;
}
}
參數說明:
arr:可以是存放圖片路徑的一個數組,也可以是選取的img的jquery物件;
funLoading:每個單獨的圖片載入完成後執行的操作;
funOnLoad:全部圖片都載入完成後的操作;
funOnError:單一圖片載入出錯時的操作。
程式碼如下:
var imgonload=function(errors){
/*errors:載入出錯的圖片數量;*/
console.log("loaded," errors " images loaded error!");
}
var funloading=function(n,total,src,obj){
/*
n:已載入完成的數量;
total:總共需要載入的圖片數量;
src:目前載入完成的圖片路徑;
obj:當loadimg函數中傳入的arr為存放圖片路徑的陣列時,obj=src,是圖片路徑,
當arr為jquery物件時,obj是目前已載入完成的img dom物件。
*/
console.log(n "of" total " pic loaded.",src);
var newimg = document.createElement("img");
newimg.src=src;
$("body").append(newimg).fadeIn();
}
var funloading_obj=function(n,total,src,obj){
console.log(n "of" total " pic loaded.",src);
$(obj).attr("src",src);
$(obj).fadeIn(200);
}
var funOnError=function(n,total,src,obj){
console.log("the " n "st img loaded Error!");
}
程式碼如下:
console.log("loading...");
loadimg($("img"),funloading_obj,imgonload,funOnError);
/*loadimg(["http://pic22.nipic.com/20120619/9607634_212642465144_2.jpg",
"/20120531/1670912_103610084349_2.jpg",
"/20120616/4952071_130629530136_2.jpg",
"/20120610/1723580_105037029000_2.jpg",
"http://pic22.nipic.com/20120617/2572038_125013326121_2.jpg"
],funloading,imgonload,funOnError);*/
上面算是原生態寫法了,下面我們介紹一個基於Lazy Load, 延遲載入圖片的 jQuery 外掛程式
Lazy Load 依賴 jQuery. 請將下列程式碼加入頁面 head 區域:
複製程式碼
程式碼如下:
你必須修改HTML 代碼. 在src 屬性中設定展位符圖片, demo 頁面使用1x1 像素灰色GIF 圖片. 並且需要將真實圖片的URL 設置到data-original 屬性. 這裡可以定義特定的class 以獲得需要延遲加載的圖片物件. 透過這種方法你可以簡單地控制插件綁定.
處理圖片的程式碼如下.
$("img.lazy").lazyload();
這將使所有 class 為 lazy 的圖片將被延遲加載. 可以參考基本選項 demo
設定敏感度
幾乎所有瀏覽器的JavaScript 都是啟動的. 然而可能你仍希望能在不支援JavaScript 的客戶端展示真實圖片. 當瀏覽器不支援JavaScript 時優雅降級, 你可以將真實的圖片片段在寫