画像のプリロードと遅延ロードを実装する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 の結合テーブルにインデックスを作成する方法

推薦する

Vue の better-scroll コンポーネントを使用して水平スクロール機能を実現する

について最近、Vue を学習する過程で、基本的な知識の練習と強化を目的として、Qunar.com の...

UIエンジニアのキャリアについての私たちの考え

私は長い間落ち込んでいます、なぜでしょうか?以前、お客様から、提供されたソフトウェアが正常に動作しな...

カンマで区切られたmysqlの分割関数の実装

1: 文字列を区切るためのストアドプロシージャを定義する 区切り文字 $$ `mess`$$ を使う...

VMware で VMware ツールをインストールしてもインストール ファイルが表示されない問題を解決する方法

VMware ツールは VMware の使用に非常に便利です。そのため、VMware ツールをインス...

MySQL 8.0 オンライン DDL クイック列追加の概要

目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...

SQL と MySQL のステートメント実行順序の分析

今日、問題が発生しました: MySQL の insert into、update、delete ステ...

mysql 8.0.19 winx64.zip インストール チュートリアル

この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...

Debian システムでの自動パッケージ更新の問題を解決する方法

いつから始まったのかはわかりませんが、コンピュータの電源を入れてインターネットに接続するたびに、デー...

vue シンプルメモ帳開発の詳しい説明

この記事では、参考までにEasy Notepadを実装するためのVueの具体的なコードを紹介します。...

CSS モジュールソリューション

CSS のモジュール ソリューションは、JS のモジュール ソリューションと同じくらい多く存在すると...

Linux ディスクとディスク パーティションを理解するための記事

序文Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。...

JavaScriptの擬似配列と配列の使い方と違い

擬似配列と配列JavaScript では、5 つのプリミティブ データ型を除き、関数を含め、その他す...

JS の難しさ 同期と非同期、スコープとクロージャ、プロトタイプとプロトタイプ チェーンの詳細な説明

目次JS スリーマウンテンズ同期 非同期同期と非同期の違い範囲、終了関数スコープチェーンブロックスコ...

JavaScript のカンマ式が含まれている場合について

JavaScript の if ステートメントで英語のカンマ「,」が表示されることがあります。これは...

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...