JavaScript 遅延読み込みの詳細な説明

JavaScript 遅延読み込みの詳細な説明

遅延読み込み

名前の通り、私は怠け者なので、すべてのコンテンツをロードしたくありません。ユーザーが後でロードしているものを見たいと思ったとき、

概要: 遅延読み込みは実際には読み込みを遅らせること、つまり必要なときにオブジェクトを読み込むことです。

実施原則:

まず最初に読み込むべき最初の画像が多数必要であり、読み込みが完了したら、後で必要な画像を表示します。

達成するための手順:

1. 画像を読み込む
2. 読み込む画像を決定する
3. 目に見えない読み込み画像
4. 実際の写真を置き換える

CSS スタイル:

    <スタイル>
        画像 {
            幅: 400ピクセル;
            高さ: 300px;
            表示: ブロック;
        }
        。行{
            幅: 300ピクセル;
            高さ: 400px;
        }
    </スタイル>

HTML部分:

  <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(1).jpeg">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(3).jpeg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(9).jpeg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(10).jpg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(13).jpeg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(92).jpeg"">
        <img src="image/load.gif" alt="" data-original="image/図片(1).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(2).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(19).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(23).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(33).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(37).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(38).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(39).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(40).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(41).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(42).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(43).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(44).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(45).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(46).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(47).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(48).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(49).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(50).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(51).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(52).jpg">
        <img src="image/load.gif"alt="" data-original=" image/図片(53).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(54).jpg">

なぜ2つのパスがあるのですか? imgには本物の写真と偽物の写真があるため、まず偽物を読み込み、それを本物の写真に置き換える必要があります。下の図では、偽物が左側にあり、本物の写真が右側にあります。

スクリプト部分:

    <スクリプト>
        let view = document.documentElement.clientHeight; //ブラウザウィンドウの表示領域の高さを取得する function fn1(){
            setTimeout(function lazyload() { // 1秒後に実行を開始するタイマーを追加します let imgs = document.querySelectorAll('img'); // すべてのimgタグを取得します // console.log(imgs);
            for (let item of imgs) { // for-of を使用してすべての画像を反復処理します // ブラウザに画像の位置を表示します let rect = item.getBoundingClientRect(); // 表示領域内の各画像の位置を見つけます console.log(rect);
                if (rect.bottom >= 0 && rect.top < view) { //if文で画像の下部が0より大きくブラウザの表示領域より小さい場合は次の操作を行う item.src = item.getAttribute('data-original') //data-originalのパスを取得しimgに渡す
                }
            }
        },1000)
        }
        関数fn1();
        document.addEventListener('scroll',fn1) //スクロールイベントが発生すると、fn1関数のタスクが実行されます</script>

for-in や for ループの代わりに for-of を使用するのはなぜですか?詳細については、ES6のfor-ofが何を取得するかを参照してください。

効果は以下のとおりです。

完全なコード:

<!DOCTYPE html>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>遅延読み込み</title>
    <スタイル>
        画像 {
            幅: 400ピクセル;
            高さ: 300px;
            表示: ブロック;
        }
        。行{
            幅: 300ピクセル;
            高さ: 400px;
        }
    </スタイル>
</head>
<本文>
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(1).jpeg">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(3).jpeg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(9).jpeg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(10).jpg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(13).jpeg"">
        <img class="rwo" src="image/load.gif" alt="" data-original="image/図片(92).jpeg"">
        <img src="image/load.gif" alt="" data-original="image/図片(1).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(2).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(19).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(23).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(33).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(37).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(38).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(39).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(40).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(41).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(42).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(43).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(44).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(45).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(46).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(47).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(48).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(49).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(50).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(51).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(52).jpg">
        <img src="image/load.gif"alt="" data-original=" image/図片(53).jpg">
        <img src="image/load.gif" alt="" data-original="image/図片(54).jpg">
    <スクリプト>
        view を document.documentElement.clientHeight に設定します。
        関数fn1(){
            setTimeout(関数lazyload() {
            imgs = document.querySelectorAll('img');
            // コンソールログ(画像);
            for (let 項目のimgs) {
                // ブラウザに画像の位置を表示します。let rect = item.getBoundingClientRect();
                コンソールにログ出力します。
                if (rect.bottom >= 0 && rect.top < ビュー) {
                    item.src = item.getAttribute('データオリジナル')
                }
            }
        },1000)
        }
        関数fn1();
        document.addEventListener('スクロール',fn1)
    </スクリプト>
</本文>
 
</html>

読み込み中の写真は下記に添付しています。もちろん自分で探すこともできます(自分で探すのは面倒だと思いますが—.—)。他の写真も自分で探すのが面倒な場合は、プライベートメッセージを送っていただければ整理してお送りしますღ( ´・ᴗ・` )

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • 画像の遅延読み込みとページパフォーマンスの最適化を実現するネイティブJS
  • JavaScript ウォーターフォール画像の遅延読み込み例の分析と最適化
  • JSはページデータの遅延読み込みを実装します
  • JavaScript画像の遅延読み込みの最適化方法の詳細な説明

<<:  DockerコンテナでJupyterノートブックを設定する方法

>>:  Web2.0: 情報過多の原因と解決策

推薦する

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

Linux システムに 3 つ以上の Tomcat をインストールする (詳細な手順)

複数のTomcatをインストールする場合は、システムにJDKがインストールされている必要があり、 T...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...

ホバー画像のポップアウトポップアップ効果を実現するための純粋な CSS のサンプルコード

実施原則メイングラフィックは、背景と前景の 2 つの要素で構成されています。次のサンプルコードでは、...

MySQL マスター/スレーブ ステータスを監視するシェル スクリプト

Linuxでシェルスクリプトを共有して、MySQLのマスタースレーブ状態を監視し、エンタープライズW...

純粋なCSSで立体的な画像配置効果を実現するサンプルコード

1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...

MySQL のグループ分けの例

mysql のような php switch case ステートメント。 xxフィールドを選択、ケース...

MySQLデータの挿入、更新、削除の詳細

目次1. 挿入2. 更新3. 削除1. 挿入 顧客に挿入( 顧客.顧客住所、 顧客.cust_cit...

フォーム検証機能を実装するためのネイティブ js

目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...

Linux C バックグラウンドサービスプログラムの単一プロセス制御の実装

導入通常、バックグラウンド サーバー プログラムには 1 つのプロセスのみが必要ですが、単一のプロセ...

VMware vSphere 6.7 (ESXI 6.7) のグラフィック インストール手順

環境: VMware VCSA 6.7 (VMware-VCSA-all-6.7.0-8169922...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

Vue+js 矢印をクリックして画像を切り替える

この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...

CentOS 7.3 で Nginx 仮想ホストを設定する方法

実験環境最小限にインストールされた CentOS 7.3 仮想マシン基本環境を構成する1. ngin...