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