画像のプリロードは、ユーザーエクスペリエンスを向上させる優れた方法です。ブラウザに画像が事前に読み込まれているため、訪問者はスムーズにサイトを閲覧し、驚くほど速い読み込み時間を楽しむことができます。これは、画像が大きな割合を占める画像ギャラリーや Web サイトにとって非常に有益です。これにより、画像が迅速かつシームレスに公開され、Web サイトのコンテンツを閲覧する際のユーザー エクスペリエンスが向上します。この記事では、Web サイトのパフォーマンスと使いやすさを向上させるための 3 つの異なるプリロード手法を紹介します。
画像のプリロードを実装するには、css、JavaScript、Ajax の 3 つの方法を使用できます。これらのメソッドの実装を以下に紹介します。
CSS を使用する
CSS を使用して画像をページ要素の背景にロードするだけです。このメソッドはシンプルで効率的です:
#div1{background:url(http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg) no-repeat -9999px-9999px; } #div2{background:url(http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg) no-repeat -9999px-9999px; }
他の場所で呼び出された場合、パスが一貫している限り、ブラウザはプリロードを使用します。レンダリング中の(キャッシュされた)イメージ。シンプルかつ効率的で、JavaScript は必要ありません。
欠点: この方法を使用すると、ページの読み込みと同時に画像が読み込まれるため、ページの読み込み時間が長くなります。完了を支援するために JavaScript を使用する方が効率的です。
CSSとJavaScriptを組み合わせて使用します
functionpreload(){ if(document.getElementById) { document.getElementById("div1").style.background ="url(http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg) no-repeat -9999px -9999px"; document.getElementById("div2").style.background ="url(http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg) no-repeat -9999px -9999px"; } } functionaddLoadEvent(func){ varoldonload =window.onload; if(typeofwindow.onload !='function') { window.onload = func; } else{ window.onload =function(){ if(oldonload) { oldonload(); } func(); } } } addLoadEvent(preload);
画像の読み込みをページの読み込み後に設定しているため、画像とページの同時読み込みによるアクセス時間の延長を心配する必要はありません。
JavaScript の実行が失敗しても、画像のプリロードが失敗するだけなので、心配する必要はありません。画像が呼び出されると、正常に表示されます。
JavaScript を使用して実装する
方法 1
varimages =newArray() functionpreload(){ for(i =0; i < preload.arguments.length; i++) { images[i] = newImage() images[i].src = preload.arguments[i] } } preload( "http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg", "http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" )
方法 2
このメソッドは、実際には方法 1 と同じ原理を持ちますが、配列で実装されず、画像オブジェクト。
if(document.images) { img1 = newImage(); img2 = newImage(); img3 = newImage(); img1.src = "http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg"; img2.src = "http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg"; }
Ajax の使用
上記のすべての方法が十分に優れていないと仮定すると、別の方法があります。それは、Ajax を使用して画像をプリロードすることです。 DOM を使用してプリロードを実装すると、画像、CSS、JavaScript など、その他のものをロードできます。 JavaScript を直接使用する場合と比較して、Ajax を使用する利点は、現在のページに影響を与えることなく CSS と JavaScript をプリロードできることです。これは画像にとって実際には問題ではありませんが、それでも、この方法は非常にシンプルで効率的です:
window.onload =function(){ setTimeout(function(){ // XHR to request a JS and a CSS varxhr =newXMLHttpRequest(); xhr.open('GET','http://domain.tld/preload.js'); xhr.send(''); xhr = newXMLHttpRequest(); xhr.open('GET','http://domain.tld/preload.css'); xhr.send(''); // preload image newImage().src ="http://domain.tld/preload.png"; }, 1000); };
このように、このコードは 3 つのファイルをプリロードします: preload.js、preload.css、preload .png 。 1 秒の遅延を設定するのは、主に JavaScript ファイルの読み込みによって通常のページで機能上の問題が発生するのを防ぐためです。
これをカプセル化するには、ネイティブ JavaScript を使用してこのコードを記述する方法を見てみましょう:
window.onload =function(){ setTimeout(function(){ // reference to <head> varhead =document.getElementsByTagName('head')[0]; // a new CSS varcss =document.createElement('link'); css.type = 'text/css'; css.rel = 'stylesheet'; css.href = 'http://domain.tld/preload.css'; // a new JS varjs =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 newImage().src ='http://domain.tld/preload.png'; }, 1000); };
ここでは、DOM を介して 3 つの要素を作成し、ページに 3 つのファイルをプリロードしました。元の記事で述べたように、このアプローチは Ajax にはあまり適していません。プリロードされたファイルのコンテンツを読み込みページに追加しないでください。