jQueryは、画像のロード完了方法の要約を判断する
3379 ワード
画像の処理、例えばスライド再生、スケールなどは、すべての画像が完了した後に操作されることに依存する.
今日は、すべてのピクチャのロードが完了したことをどのように判断するかを見てみましょう.ロードが完了する前にloadingのgif図を使用してロード中であることを示すことができます.
一、普通の方法
imgのloadメソッドをリスニングし、loadごとに1枚の画像を比較します.キーコードは次のとおりです.
二、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.
キーコード:
基本的な考え方:
画像resolve()をロードするたびに、when()はすべてのDeferredが完了するとdone()を実行します.
注:なぜなら$whenがサポートするパラメータは$.when(dfd1, dfd2, dfd3, ...),そこでapplyを用いて配列パラメータを受け入れた.
completeは画像がロードされているかどうかを判断します
Googleに感謝します.使いやすい方法を見つけました.簡単な使い方は:
それからまた一つの方法を発見しました
このうちセレクタはピクチャのidまたはclassであり、functionの中の方法はコールバック関数であり、ピクチャのロードが完了した後に実行されるが、私は多くのことを試験したが、まったくそうではない.正しい解決方法は:
jsを使うのが一番いいという友達がいますが、方法は以下の通りです.
ネット上でコードの例を見つけます
以下に、複数のイメージに対するロード判定を示す.
この方法でwindowを避けることができます.onloadの不足ですが、コードは少し複雑で、性能の面ではwindowより優れています.onloadはかなり強いです.
今日は、すべてのピクチャのロードが完了したことをどのように判断するかを見てみましょう.ロードが完了する前にloadingのgif図を使用してロード中であることを示すことができます.
一、普通の方法
imgのloadメソッドをリスニングし、loadごとに1枚の画像を比較します.キーコードは次のとおりです.
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は画像がロードされているかどうかを判断します
Googleに感謝します.使いやすい方法を見つけました.簡単な使い方は:
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
};
};
以下に、複数のイメージに対するロード判定を示す.
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はかなり強いです.