画像のプリロードは、ユーザー エクスペリエンスを向上させる優れた方法です。ブラウザに画像が事前に読み込まれているため、訪問者はスムーズにサイトを閲覧し、驚くほど速い読み込み時間を楽しむことができます。これは、画像が大きな割合を占める画像ギャラリーや Web サイトにとって非常に有益です。これにより、画像が迅速かつシームレスに公開され、Web サイトのコンテンツを閲覧する際のユーザー エクスペリエンスが向上します。この記事では、Web サイトのパフォーマンスと使いやすさを向上させるための 3 つの異なるプリロード手法を紹介します。
プリロードされた画像を実装するには、CSS、JavaScript、およびその 2 つのさまざまな組み合わせの使用など、さまざまな方法があります。これらのテクノロジーは、さまざまな設計シナリオに従って対応するソリューションを設計でき、非常に効率的です。
CSS を使用するだけで、画像を簡単かつ効率的にプリロードできます。コードは次のとおりです:
#preload-01 { 背景: url(
http://domain.tld/image-01.png) no-repeat -9999px -9999px }
;
#preload-02 { 背景: url(
http://domain.tld/image-02.png) no-repeat -9999px -9999px }
;
#preload-03 { 背景: url(
http://domain.tld/image-03.png) no-repeat -9999px -9999px }
これら 3 つの ID セレクターを (X)HTML 要素に適用すると、CSS の背景属性を通じてオフスクリーンの背景に画像をプリロードできます。これらの画像へのパスが同じである限り、ブラウザは、Web ページの別の場所で呼び出されたときに、レンダリング プロセス中にプリロードされた (キャッシュされた) 画像を使用します。シンプルかつ効率的で、JavaScript は必要ありません。
この方法は効率的ですが、まだ改善の余地があります。このメソッドを使用して読み込まれた画像は、ページ上の他のコンテンツと一緒に読み込まれるため、ページの全体的な読み込み時間が長くなります。この問題を解決するために、ページが読み込まれるまでプリロード時間を遅らせるための JavaScript コードを追加しました。コードは次のとおりです:
// より良い画像のプリロード @
http://perishablepress.com/press/2009/12/28/3-ways-preload-images-css-javascript-ajax/http://perishablepress.com/press/2009/12/28/3-ways-preload-images-css-javascript-ajax/">http: //perishablepress.com/press/2009/12/28/3-ways-preload-images-css-javascript-ajax/> 関数 preloader() {
If (document.getElementById) {
document.getElementById("preload-01").style.background = "url(
http://domain.tld/image-01.png) no-repeat -9999px -9999px";
document.getElementById("preload-02").style.background = "url(
http://domain.tld/image-02.png) no-repeat -9999px -9999px";
document.getElementById("preload-03").style.background = "url(
http://domain.tld/image-03.png) no-repeat -9999px -9999px";
}
}
function addLoadEvent(func) {
var oldonload = window.onload
If (typeof window.onload != '関数') {
window.onload = func;
} else {
window.onload = function(){window.onload = function()
If (oldonload) {
oldonload();
func();
}
}
addLoadEvent(プリローダー);
スクリプトの最初の部分では、クラス セレクターを使用して要素を取得し、その要素に背景属性を設定して、さまざまな画像をプリロードします。
スクリプトの 2 番目の部分では、addLoadEvent() 関数を使用して、ページが読み込まれるまで preloader() 関数の読み込み時間を遅らせます。
ユーザーのブラウザで JavaScript が適切に実行されない場合はどうなりますか?非常に簡単です。ページが画像を呼び出すと、画像はプリロードされず、通常どおり表示されます。
方法 2: プリロードの実装にのみ JavaScript を使用する
上記の方法は非常に効率的な場合もありますが、実際の実装プロセスでは時間がかかりすぎることが徐々にわかりました。代わりに、画像のプリロードには純粋な JavaScript を使用することを好みます。以下に、最新のすべてのブラウザで美しく機能する 2 つのプリロード方法を示します。
JavaScript スニペット 1
必要な画像のパスと名前を編集してロードするだけで、簡単に実装できます:
<スクリプトタイプ="text/javascript">
関数 preload() {
for (i = 0; i < preload.arguments.length; i ) {
画像[i] = 新しい画像()
画像[i].src = preload.arguments[i]
preload(
"
http://domain.tld/gallery/image-001.jpg
", "
"
http://domain.tld/gallery/image-002.jpg
", "
"
http://domain.tld/gallery/image-003.jpg"
この方法は、大量の画像をプリロードする場合に特に適しています。私のギャラリー Web サイトでは、このテクノロジーを使用して 50 を超える画像をプリロードしています。このスクリプトをログイン ページに適用すると、ユーザーがログイン ID を入力するとすぐに、ほとんどのギャラリー画像がプリロードされます。
JavaScript コード スニペット 2
この方法は上記の方法と似ており、任意の数の画像をプリロードすることもできます。次のスクリプトを任意の Web ページに追加し、プログラムの指示に従って編集します。
コードをコピー
コードは次のとおりです:
<スクリプトタイプ="text/javascript">
img1 = 新しい画像();
img2 = 新しい画像();
img3 = 新しい画像();
img1.src = "
http://domain.tld/path/to/image-001.gif
";
img2.src = "
http://domain.tld/path/to/image-002.gif
";
img3.src = "
http://domain.tld/path/to/image-003.gif
";
}
ご覧のとおり、画像をロードするたびに、「img1 = new Image();」などの変数を作成し、「img3.src =
"../path/to/image-003.gif";"。このモードを参照すると、必要なだけ画像をロードできます。
この方法をさらに改良しました。このスクリプトを関数にラップし、addLoadEvent() を使用して、ページが読み込まれるまでプリロード時間を遅らせます。
コードをコピーします
コードは次のとおりです:
関数 preloader() {
If (document.images) {
}
function addLoadEvent(func) {
var oldonload = window.onload
If (typeof window.onload != '関数') {
window.onload = func;
} else {
window.onload = function(){window.onload = function()
If (oldonload) {
oldonload();
func();
}
}
addLoadEvent(プリローダー);
方法 3: Ajax を使用してプリロードを実装する
上記の方法は十分にクールではないようです。それでは、Ajax を使用して画像のプリロードを実装する方法を見てみましょう。この方法では、DOM を使用して画像をプリロードするだけでなく、CSS、JavaScript、その他の関連するものもプリロードします。 JavaScript を直接使用する場合よりも Ajax を使用する利点は、JavaScript と CSS の読み込みが現在のページに影響を与えないことです。この方法はシンプルで効率的です。
コードをコピー
コードは次のとおりです:
window.onload = function() {
setTimeout(function() {
// JS と CSS をリクエストする XHR var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain.tld/preload.js');
xhr.send('');
xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain.tld/preload.css');
xhr.send('');
新しい画像()。src = "
}, 1000);
};
上記のコードは、「preload.js」、「preload.css」、および「preload.png」をプリロードします。 1000 ミリ秒のタイムアウトは、スクリプトがハングして通常のページで機能上の問題が発生するのを防ぐためです。
次に、JavaScript を使用して読み込みプロセスを実装する方法を見てみましょう:
コードをコピーします
コードは次のとおりです:
window.onload = function() {
// 新しい JS
var js = document.createElement("script");
js.type = "text/javascript";
js.src = "
http://domain.tld/preload.js
";
// JS と CSS をプリロードします head.appendChild(css);
head.appendChild(js);
// 画像をプリロードします
new Image().src = "
http://domain.tld/preload.png
";
}, 1000);
};
ここでは、DOM を通じて 3 つの要素を作成し、3 つのファイルをプリロードします。上で述べたように、Ajax では、ファイルの読み込みは読み込みページには適用されません。この観点から見ると、Ajax メソッドは JavaScript よりも優れています。
この記事ではまず、画像プリロード技術を実装する 3 つの方法をすでに知っていると思いますが、それを自分のプロジェクトに適用してください。