CSS、JavaScript、Ajax を使用して効率的な画像のプリロード_JavaScript スキルを習得する

WBOY
リリース: 2016-05-16 17:19:44
オリジナル
922 人が閲覧しました

方法 1: CSS と JavaScript を使用してプリロードを実装します

画像のプリロードを実装するには、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 要素に適用すると、background 属性を通じて画像をオフスクリーンにプリロードできます。背景のCSS。これらの画像へのパスが同じである限り、ブラウザは、Web ページの他の場所で呼び出されたときに、レンダリング プロセス中にプリロードされた (キャッシュされた) 画像を使用します。シンプルかつ効率的で、JavaScript は必要ありません。
この方法は効率的ですが、まだ改善の余地があります。このメソッドを使用して読み込まれた画像は、ページ上の他のコンテンツと一緒に読み込まれるため、ページの全体的な読み込み時間が長くなります。この問題を解決するために、ページが読み込まれるまでプリロード時間を遅らせるための JavaScript コードを追加しました。コードは次のとおりです:
コードをコピー コードは次のとおりです:

// より良い画像のプリロード @ http://perishablepress.com/ press/2009/12/ 28/3-ways-preload-images-css-javascript-ajax/
function preloader() {
if (document.getElementById) {
ドキュメント。 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 != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func()
}
}
addLoadEvent(preloader); >スクリプトの開始部分では、クラス セレクターを使用して要素を取得し、その要素に背景属性を設定して、さまざまな画像をプリロードします。
スクリプトの 2 番目の部分では、addLoadEvent() 関数を使用して、ページが読み込まれるまで preloader() 関数の読み込み時間を遅らせます。
ユーザーのブラウザで JavaScript が適切に実行されない場合はどうなりますか?非常に簡単です。ページが画像を呼び出すと、画像はプリロードされず、通常どおり表示されます。


方法 2: JavaScript のみを使用してプリロードを実装する


上記の方法は場合によっては非常に効率的ですが、実際の実装プロセスでは時間がかかりすぎることが徐々にわかりました。 。代わりに、画像のプリロードには純粋な JavaScript を使用することを好みます。以下に、最新のすべてのブラウザで美しく機能する 2 つのプリロード方法を示します。 JavaScript コード スニペット 1

必要な画像のパスと名前を編集してロードするだけです。実装は簡単です。



コードをコピーします
コードは次のとおりです。 ご覧のとおり、画像をロードするたびに、「img1 = new Image();」などの変数を作成し、画像のソース アドレスを宣言する必要があります。 "img3.src = "../path /to/image-003.gif";" のように。このパターンを使用すると、必要な数の画像をロードできます。
このメソッドを再度改良しました。このスクリプトを関数にラップし、addLoadEvent() を使用して、ページが読み込まれるまでプリロード時間を遅らせます。

コードをコピー コードは次のとおりです。
function preloader() {
if (ドキュメント.イメージ) {
var img1 = 新しい画像();
var 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";
}
}
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() {
// JS と CSS をリクエストする XHR
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain. tld/preload .js');
xhr.send('');
xhr = new XMLHttpRequest(); .css' );
xhr.send('');
// 画像をプリロード
new Image().src = "http://domain.tld/preload.png"; }, 1000 );
};


上記のコードは、「preload.js」、「preload.css」、「preload.png」をプリロードします。 1000 ミリ秒のタイムアウトは、スクリプトがハングして通常のページで機能上の問題が発生するのを防ぐためです。
次に、JavaScript を使用して読み込みプロセスを実装する方法を見てみましょう:



コードをコピーします

コードは次のとおりです。 window.onload = function() { setTimeout(function() { // への参照 var head = document.getElementsByTagName('head' )[0] ;
// 新しい CSS
var css = document.createElement('link');
css.type = "text/css";
css.rel = "stylesheet ";
css.href = "http://domain.tld/preload.css";
// 新しい 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", };


ここでは、DOM を介して 3 つの要素を作成し、3 つのファイルをプリロードします。上で述べたように、Ajax では、ファイルの読み込みは読み込みページには適用されません。この観点から見ると、Ajax メソッドは JavaScript よりも優れています。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート