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

推薦する

Navicat For MySQL の使い方に関する簡単なチュートリアル

推薦する: Navicat for MySQL 15 登録とアクティベーションの詳細なチュートリアル...

Tomcatの動作原理を分析する

SpringBoot は巨大な Python のようで、ゆっくりと私たちの周りを巻きつき、麻痺させま...

Centos7 に yum を使用して MySQL をインストールし、リモート接続を実現する方法

Centos7はyumを使用してMySQLをインストールし、リモート接続を実現する方法です。MySQ...

Centos7 に PHP と Nginx をインストールする詳細なチュートリアル

Centos のサーバー側への適用がますます普及するにつれて、Centos7 もますます使用されるよ...

JavaScript プログラムのループ構造の詳細な説明

目次構造を選択ループ構造その間…しながらforループ…のために…で…の…のためにまとめループの終了壊...

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...

Vue3.0 異なる解像度のコンピュータの適応操作

まず依存関係をインストールする必要があります npm i lib-flexible-computer...

QT が MYSQL データベースに接続するための詳細な手順

最初のステップは、対応するデータベースモジュール(sql)をプロジェクトファイル( .pro )に追...

CSS3 ベジェ曲線の例: リンクホバーアニメーション効果の作成

CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...

Linux コマンドラインターミナルで画面を分割するための 2 つのツール

ターミナル分割画面ツールは2つあります: screen と tmux 1. 画面分割を使用する(上下...

DockerはClickHouseをインストールし、データテストを初期化します

クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...

CSS3のtext-fill-colorプロパティの詳細な説明

text-fill-color とは何を意味しますか?文字通りの意味から言えば、「テキストの塗りつぶ...

間違った MySQL コマンドをキャンセルしたい場合はどうすればいいですか?

間違った mysql コマンドを入力したのでキャンセルしたいです。どうすればいいですか? ctrl ...

プロジェクトの再構築からプロジェクトにおける CSS3 カスタム変数の使用について話す

CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...