首頁 > web前端 > js教程 > Jquery實作圖片預先載入與延時載入的方法_jquery

Jquery實作圖片預先載入與延時載入的方法_jquery

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-05-16 16:25:19
原創
1030 人瀏覽過

本文實例講述了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 以獲得需要延遲加載的圖片物件. 透過這種方法你可以簡單地控制插件綁定.
複製程式碼 程式碼如下:
Jquery實作圖片預先載入與延時載入的方法_jquery

處理圖片的程式碼如下.
複製程式碼 程式碼如下:
$("img.lazy").lazyload();

這將使所有 class 為 lazy 的圖片將被延遲加載. 可以參考基本選項 demo

設定敏感度


幾乎所有瀏覽器的JavaScript 都是啟動的. 然而可能你仍希望能在不支援JavaScript 的客戶端展示真實圖片. 當瀏覽器不支援JavaScript 時優雅降級, 你可以將真實的圖片片段在寫

程式碼如下:

Jquery實作圖片預先載入與延時載入的方法_jquery


可以透過 CSS 隱藏佔位符. 程式碼如下:

.lazy {
  display: none;
}

在支援 JavaScript 的瀏覽器中, 你必須在 DOM ready 時將佔位符顯示出來, 這可以在插件初始化的同時完成. 程式碼如下:
$("img.lazy").show().lazyload();

這些都是可選的, 但如果你希望插件平穩降級這些都是應該做的.

設定敏感度


預設圖片會出現在螢幕時載入. 如果你想提前載入圖片, 可以設定 threshold 選項, 設定 threshold 為 200 令圖片在距離畫面 200 像素時提前載入.

程式碼如下:
$("img.lazy").lazyload({ threshold : 200 });

佔位圖片

你也可以設定一個佔位圖片並定義事件來觸發載入動作. 這時需要為佔位圖片設定一個URL 位址. 透明, 灰色和白色的1x1 像素的圖片已經包含在插件裡面.

事件觸發載入


事件可以是任何jQuery 時間, 如: click 和mouseover. 你也可以使用自訂的事件, 如: sporty 和foobar. 預設情況下處於等待狀態, 直到使用者捲動到視窗上圖片所在位置. 在灰色佔位圖片被點擊之前阻止載入圖片, 你可以這樣做:

程式碼如下:

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


當圖片完全加載的時候, 插件預設地使用show() 方法來將圖顯示出來. 其實你可以使用任何你想用的特效來處理. 下面的程式碼使用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
});
希望本文所述對大家的javascript程式設計有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
引入jQuery 文件
來自於 1970-01-01 08:00:00
0
0
0
jquery筆記哪裡有下?
來自於 1970-01-01 08:00:00
0
0
0
javascript - vue+webpack怎麼引入jquery
來自於 1970-01-01 08:00:00
0
0
0
php+jquery的問題
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板