画像のプリロードと遅延ロードを実装するJavaScript

画像のプリロードと遅延ロードを実装するJavaScript

この記事では、JavaScriptで画像のプリロードと遅延ロードを実装するための具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

プリロード

プリロードとは、後で必要になるリソースを事前にロードし、後で使用するときにキャッシュから直接取得することです。たとえば、Web サイトのオープニング アニメーションは多数の画像で構成されています。これらの画像が事前に読み込まれていない場合、アニメーションはスムーズに実行されず、点滅する白い画面が表示されます。画像はユーザーエクスペリエンスを向上させる優れた方法です。画像はブラウザに事前に読み込まれるため、迅速かつシームレスに公開され、ユーザーが Web サイトのコンテンツを閲覧する際のユーザー エクスペリエンスが向上します。

//ここでは写真の数を書きました。写真の名前はアラビア数字で、接尾辞はjpgである必要があります。
//次のコメントでは別のメソッドを紹介します。そのうちの1つを選択してください。もちろん、コメントエリアにメソッドを残して一緒に学ぶこともできます。function preload() {
  (var i=1;i<13;i++){
    var 画像 = [];
    img[i]=new Image(); //imgオブジェクトを作成 img[i].src="img/"+i+".jpg"
  }
}
/*関数プリロード() {
    img1=new Image(); //img オブジェクトを作成 img1.src="xxx/xxx/xxx.jpg" //画像アドレス img2=new Image();
    画像2.src="xxx/xxx/xxx.jpg"
    img3=新しい画像();
    画像3.src="xxx/xxx/xxx.jpg"
    img4=新しい画像();
    画像4.src="xxx/xxx/xxx.jpg"
    ......
  }
}*/

// パラメータ fun を持つ関数を定義します
関数addLoadEvent(fun) {
  // ロードされた関数を oldnload 変数に割り当てます。var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    ウィンドウのonload = 楽しい;
  } それ以外 {
    window.onload = 関数() {
      //変数を割り当てた関数 oldonload() がここで実行されます。
      // ここで渡された func パラメータ fun() が実行されます。
    }
  }
}
LoadEvent を追加します(プリロード());
/*
 oldonload は自己定義変数であり、onload イベントが割り当てられます。onload イベントは、ページまたは画像が読み込まれた直後に発生します。
 onload はページと画像が読み込まれた後に実行されるイベントです。ただし、実際の使用では、onload を複数回割り当てると、後からコピーされたメソッドによって onload が上書きされ、onload は最後に割り当てられたメソッドのみを実行することになります。
 fun() は渡されるパラメータです。ここで fun() は preload() です。
このコードの意味は次のとおりです。
  (typeof window.onload != 'function')、つまり window.onload に値が割り当てられていない場合は、fun に直接割り当てられます。
  それ以外の場合は、プログラムが最初に値を割り当てたことを意味します。その後、ページが読み込まれた後、既存の関数が最初に実行され、次に新しい関数が実行されます。
  つまり、このコードは、onload で最初にロードされたメソッドが実行される (最初に実行される) ことを保証し、fun メソッドの実行時に上書きされるのを防ぎます (画像のプリロード)。
*/

ここで画像が読み込まれたことがわかります

遅延読み込み

これにより、ブラウザが同時に多くの画像を読み込んだり、HTTP リクエストを過剰に開いたりして、Web ページの読み込み速度が低下するのを効果的に防ぐことができます。

/*
まず、写真のパスをカスタム属性に保存し、読み込み中の gif を src に保存して、画像が表示領域に到達したら、js を使用してカスタム属性を src に置き換えると、画像が表示されます。
オンデマンドで読み込む必要があるすべての画像をコレクションに取得します。スクロール バーをスクロールするときに、表示領域に表示される画像を判断します。表示された場合は、読み込み操作を実行します。
読み込みが完了すると、画像はコレクションまたは配列から削除され、最終的には配列に読み込む必要がある画像の数は少なくなります。
*/
<div>
  <img src="img/lode.img" data-src="img/1.img" class="lazylode">
  <img src="img/lode.img" data-src="img/2.img" class="lazylode">
  <img src="img/lode.img" data-src="img/3.img" class="lazylode">
  <img src="img/lode.img" data-src="img/4.img" class="lazylode">
  <img src="img/lode.img" data-src="img/5.img" class="lazylode">
  <img src="img/lode.img" data-src="img/6.img" class="lazylode">
  <img src="img/lode.img" data-src="img/7.img" class="lazylode">
  <img src="img/lode.img" data-src="img/8.img" class="lazylode">
</div>
<スクリプト>
 var lazylode = document.querySelectorAll('.lazylode');
//item() メソッドと length プロパティのみを持ち、配列オブジェクト メソッドを持たない配列のようなオブジェクトを取得します。var imgArr = Array.prototype.slice.call(lazylode);
//クラス配列を配列に変換します lazylodeImg();
// 実行される遅延読み込みメソッドは、最初に遅延読み込みを実行して表示領域に画像を読み込む必要があります var timer;
window.addEventListener('スクロール',function(){
  clearTimeout(timer); //スロットル timer=setTimeout(function(){
    lazylodeImg(); // 画面スクロールで遅延読み込みが実行されます }, 100);
}、間違い)
関数 lazylodeImg(){
  for(var i=0;i<imgArr.length;i++){
    if(isVisibleArea(imgArr[i])){//可視領域内にあるかどうかを判断 imgArr[i].src=imgArr[i].getAttribute('data-src');
      // src をカスタム属性 imgArr.splice(i,1); に変更します。// 読み込まれた画像を配列 array i-- から削除します。
      // 添字 1 の数字が配列から削除されるため、添字 2 の元の数字は 1 に繰り上げられます}
  }
}
関数isVisibleArea(el){
  var rect = el.getBoundingClientRect();
  // 表示領域から要素の上、左、その他の値を取得します。 return rect.bottom>0 && rect.top<window.innerHeight && rect.right>0 && rect.left<window.innerHeight;
  // 両方が true の場合は true を返します
}
</スクリプト>

画像だけでなく、js、cssファイルなどもオンデマンドで読み込むことができます。スクリプトやリンクタグを作成し、その中に表示するエフェクトを追加して本文やヘッダーに追加し、スクロールイベントが実行された後にjsまたはcssファイルが読み込まれ、画面スクロールイベントが削除されます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue+webpack は遅延読み込みプロセス分析を実装します
  • Webpack4 SCSS 抽出と遅延読み込みの例
  • webpack + react + react-router が遅延読み込みを実装する方法の詳細な説明
  • js での遅延読み込みとプリロードの具体的な使用法
  • JS画像プリロードプラグインの詳しい説明
  • webpackの遅延読み込みとプリロードの詳細な説明

<<:  Ubuntuで余分なカーネルを削除する方法

>>:  MySQL の結合テーブルにインデックスを作成する方法

推薦する

MySQLの一般的なバックアップコマンドとシェルバックアップスクリプトの共有

複数のデータベースをバックアップするには、次のコマンドを使用できます。 mysqldump -uro...

モバイルインターネット時代: レスポンシブウェブデザインが一般的なトレンドに

今はモバイルインターネットが急速に発展している時代です。スマートフォンやタブレットはますます普及し、...

rpm を使用して指定されたバージョンの docker (1.12.6) をインストールする詳細な手順

1. 理由システムが Centos7.3 の場合、yum install docker を使用して直...

MySQLトランザクションの基本的な学習と経験の共有

トランザクションは、論理的な操作のグループです。この操作グループを構成する各ユニットは、成功するか失...

Vueカスタム命令の詳細な説明

目次Vueカスタムディレクティブカスタムディレクティブフック機能出力関連属性アプリケーション例要約す...

MySQL テーブル構造を Excel にエクスポートする方法

要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...

Mac OS 10.11 での MySQL 5.7.12 のインストールと設定のチュートリアル

Mac OS 10.11 に MySQL をインストールして設定する方法を、主に写真を使って手順を簡...

RHCE ブリッジング、パスワード不要のログイン、ポート番号の変更の概要

目次1. ブリッジを設定し、検証のためにパケットをキャプチャする1. ブリッジデバイスとセッションを...

JavaScript 改ざん防止オブジェクトの使用例

目次JavaScript 改ざん防止オブジェクト1. 拡張不可能なオブジェクト2. 封印された物体3...

Vue3 における親コンポーネントと子コンポーネント間の値の転送の詳細な説明

vue3 が誕生してからかなり時間が経ち、筆者も最近になって vue3 を学び始めました。 vue2...

WebStormはVue3統合APIのソリューションを正しく識別できません

1 問題の説明Vue3 の統合 API は、defineComponent やその他の関数が認識でき...

MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...

Node.js の非同期イテレータの詳細な説明

目次序文非同期イテレータとは何ですか?非同期イテレータストリームとしてページング機能を備えたAPIの...

ウェブ開発で遭遇した問題と経験

<br />以下は開発中に遭遇した問題と、そこから得た経験です。デバッグに時間がかかりま...

Dockerプライベート倉庫の構築と利用の詳細説明

イメージは hub.docker.com に保存できますが、ネットワーク速度が比較的遅いです。内部環...