HTML
<img
width="1024"
src="https://placehold.it/64x48.jpg"
data-src-defer="https://images.unsplash.com/photo-1570280406792-bf58b7c59247?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1486&q=80"
alt="image 1"
/>
<img
width="1024"
src="https://placehold.it/64x48.jpg"
data-src-defer="https://images.unsplash.com/photo-1557053964-d42e8e29cb27?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1500&q=80"
alt="image 2"
/>
JS
function deferImgs() {
Array
.from(document.querySelectorAll("img[data-src-defer]"))
.forEach((element) => {
element.setAttribute("src", element.dataset.srcDefer);
});
}
window.addEventListener("load", deferImgs());
================================================== ==============
私はこの編集でFarrukhの要求に応じようとしています。
私は最善を尽くしていますが、残念ながら英語は私が話す第三言語にすぎません。そして、私は言語の天才ではありません。:D
このjsコードスニペットは、いくつかの大きな画像の読み込みの遅延を示しています。これは実際的な実装ではありません。画像間のサイズの違いは意図的に大きくなっています。これは、テストが例示的でなければならないためです。ブラウザ開発ツールページからその動作を監視できます。F12> [ネットワーク]タブ>[速度設定]ドロップダウンテストの理想的なネットワーク速度は、1〜3MB /秒です(ネットワーク速度が遅い場合があります)。テストを数回実行すると、画像が読み込まれる順序はこの場合は制御されませんが、送信に依存することがわかります。規制されていないため、どの画像が最初に到着するかを予測することはできません。
まず、小さな画像を大きなプレースホルダーに読み込みます。(画像:64x48.jpg>プレースホルダーwidth = "1024")。
querySelectorAll()メソッドは、静的ノードリストを返します。このノードのリストは一見配列のように見えますが、そうではありません。
これは配列のようなオブジェクトです。
document.querySelectorAll("img[data-src-defer]")
Array.from()メソッドは、このオブジェクトから新しい配列インスタンスを作成できます。これで、forEachメソッドをこの配列で実行できます。forEach()メソッドは、配列の要素ごとに提供された関数を1回実行します。
この場合、配列の各要素は次の関数に1回渡されます。
(element) => {
element.setAttribute("src", element.dataset.srcDefer);
}
この関数は、画像タグのsrc = ""属性の値を、同じ画像タグのデータセットの値に設定します。
src="https://placehold.it/64x48.jpg";
data-src-defer="https://images.unsplash.com/photo-1570280406792-bf58b7c59247?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1486&q=80";
src = data-src-defer;
So finally:
src="https://images.unsplash.com/photo-1570280406792-bf58b7c59247?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1486&q=80";