国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery 判斷圖片是否加載完成方法匯總

2019-11-20 11:52:57
字體:
來源:轉載
供稿:網友

對于圖片的處理,例如幻燈片播放、縮放等,都是依賴于在所有圖片完成之后再進行操作。

今天來看下如何判斷所有的圖片加載完成,而在加載完成之前可以使用 loading 的 gif 圖表示正在加載中。

一、普通方法

監聽 img 的 load 方法,每 load 一張圖片比較一次。關鍵代碼如下:

var num = $img.length;$imgs.load(function() {  num--;  if (num > 0) {    return;  }  console.log('load compeleted');}

二、使用 jQuery 中的 Deferred 對象

Deferred 對象是從 jQuery 1.5.0 版本開始引入的一個新功能,詳細介紹可以見 官方文檔。

簡單的說,Deferred 對象就是jQuery的回調函數解決方案,它解決了如何處理耗時操作的問題, 對那些操作提供了更好的控制,以及統一的編程接口。

阮一峰有一篇文章是介紹 Deferred 對象的,寫的比較詳細,對于入門比較有用。

jQuery的deferred對象詳解

在這里,我們用到了:

deferred.resolve(): Resolve a Deferred object and call any doneCallbacks with the given args.
deferred.when(): Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
deferred.done(): Add handlers to be called when the Deferred object is resolved.

關鍵代碼:

var defereds = [];$imgs.each(function() {  var dfd = $.Deferred();  $(this).load(dfd.resolve);  defereds.push(dfd);});$.when.apply(null, defereds).done(function() {  console.log('load compeleted');});

基本思路:

每加載完一張圖片 resolve(),when() 當所有的 Deferred 完成便執行 done()。

注: 因為 $.when 支持的參數是 $.when(dfd1, dfd2, dfd3, ...),所以我們這里使用了 apply 來接受數組參數。

complete判斷圖片是否加載了

感謝谷歌,找到了好使的方法,簡單用法就是:

qim=new Image();//新建一個圖片;qim.src=$preload;//圖片地址是你準備要加載的地址;if(qim.complete){ $("#cxNfloor").html($filetoload);//qim.complete表示這個圖片是否加載完畢了}

后來又發現一個方法

$("").load(function(){...});

其中選擇器是圖片的id或class,function里面的方法就是回調函數,在圖片加載完成后執行,但是我試驗了很多,壓根兒不是那么回事,正確的解決方法是:

//jquery的方式$("#imageId").load(function(){  alert("加載完成!");});

有朋友說使用js是最好的,方法如下

復制代碼 代碼如下:

document.getElementById("img2").onload=function(){}

在網上找到一段代碼
例子

function loadImage(url, callback) { var img = new Image(); //創建一個Image對象,實現圖片的預下載 img.src = url;  if(img.complete) { // 如果圖片已經存在于瀏覽器緩存,直接調用回調函數   callback.call(img);   return; // 直接返回,不用再處理onload事件  } img.onload = function () { //圖片下載完畢時異步調用callback函數。    callback.call(img);//將回調函數的this替換為Image對象  };};

下面是針對多個image的加載判斷。

var imgdefereds=[];$('img').each(function(){ var dfd=$.Deferred(); $(this).bind('load',function(){ dfd.resolve(); }).bind('error',function(){ //圖片加載錯誤,加入錯誤處理 // dfd.resolve(); }) if(this.complete) setTimeout(function(){ dfd.resolve(); },1000); imgdefereds.push(dfd);})$.when.apply(null,imgdefereds).done(function(){  callback();});

  使用這種方法就可以避免window.onload的不足,不過代碼稍顯復雜 在性能方面比起window.onload經強很多。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 揭东县| 河南省| 潼南县| 万山特区| 霸州市| 商南县| 德令哈市| 射洪县| 二手房| 临漳县| 景东| 兴城市| 五台县| 平泉县| 东乡| 古蔺县| 杨浦区| 尼木县| 响水县| 五家渠市| 叶城县| 新乡县| 黎平县| 红桥区| 青河县| 军事| 辽阳县| 灵宝市| 丘北县| 泾阳县| 和田县| 商城县| 泗阳县| 大厂| 罗甸县| 青铜峡市| 讷河市| 云梦县| 那坡县| 自治县| 唐海县|