画像のプリロードと遅延ロードを実装する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のマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...

threejs でリアルタイムポリゴン屈折を実装する方法

目次序文ステップ1: セットアップと前方屈折ステップ2: 反射とフレネル方程式ステップ3: 多面屈折...

MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法

実際に参加したプロジェクトでは、MySQL テーブルのデータ量が数百万に達すると、通常の SQL ク...

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

el-table カプセル化に基づくドラッグ可能な行と列、および選択列コンポーネントの実装

効果環境が必要ビュー要素UIドラッグアンドドロッププラグインSortable.js必要な構成プロパテ...

...

Vue3は独自のページングコンポーネントをカプセル化します

この記事の例では、vue3 が独自のページングコンポーネントをカプセル化する具体的なコードを参考まで...

Docker で複数の MySQL コンテナを作成して実行する方法の例

1. mysql/mysql-server:latestイメージを使用してMySQLインスタンスを素...

mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。

データベースのパフォーマンス最適化には、一般的にクラスタリングが採用されています。Oracle クラ...

Vueはパーセンテージバー効果を実現します

この記事では、パーセンテージバーを実現するためのVueの具体的なコードを参考までに共有します。具体的...

MySQL 8.0.13 手動インストールチュートリアル

この記事では、MySQL 8.0.13の手動インストールチュートリアルを参考までに紹介します。具体的...

Ubuntu 20.04 と NVIDIA ドライバーのインストールに関するチュートリアル

Ubuntu 20.04をインストールする NVIDIAドライバーをインストールする Pytouch...

MySQL空間関数を使用してロケーションパンチインを実装するための完全な手順

序文プロジェクトの要件は、ユーザーの現在の位置が特定の地理的位置範囲内にあるかどうかを判断することで...

Linux コマンドで .sql ファイルをエクスポートおよびインポートする方法

この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...