IntersectionObserver APIによる遅延負荷
皆さんこんにちは!これは私の最初のポスト- Wootです!私は最近、怠惰な負荷について学んできたものを共有するためにかなり興奮.どうか私は私がこれを改善する方法を教えてください!
怠惰なローディングイメージは、多くの内容でページを読み込むのに便利です.私たちは簡単にそのようなライブラリを見つけることができますyall.js and lozad.js . これらのライブラリのほとんどは共通しているIntersection Observer API . 使い方を学びましょう
IntersectionObserver
それで、私たちはこれらのライブラリがどのように働くかを理解することができます — またはも私たち自身を書く!まず、簡単に説明する
IntersectionObserver
し、第二に、どのように怠惰ロード独自の画像を使用する.IntersectionObserverは何をするか?
(素人の言葉で)IntersectionObserver
要素が先祖要素(通常ViewPort)と交差するとき、非同期に検出して、callback関数を呼び出します.
画像を含むビューポートを想像してください.いくつかのビューポートの下に座っている間、ページが読み込まれると、いくつかの画像がビューポート内に直接配置され、ユーザーが見られるようにスクロールするのを待っています.ユーザーのスクロールダウンとして、いくつかの低い位置の画像の上部は、最終的に下部ビューポートと交差するでしょう.最初の一番上のイメージピクセルがviewportと交差するとき、callback関数はイメージをロードします.
サンプル使用量
博士を読みましょう!Mozilla親切に出発点を与える.
var options = {
root: document.querySelector('#scrollArea'),
rootMargin: '0px',
threshold: 1.0
}
var observer = new IntersectionObserver(callback, options);
var target = document.querySelector('#listItem');
observer.observe(target);
上記は、怠惰な荷への最小限のセットアップです#listItem
(技術的なオプションはオプションですvar observer = new IntersectionObserver(callback);
より簡潔な方法です.
ああ、より現実的なシナリオでそれを使用しましょう.次のようになります.
博士を読みましょう!Mozilla親切に出発点を与える.
var options = {
root: document.querySelector('#scrollArea'),
rootMargin: '0px',
threshold: 1.0
}
var observer = new IntersectionObserver(callback, options);
var target = document.querySelector('#listItem');
observer.observe(target);
上記は、怠惰な荷への最小限のセットアップです#listItem
(技術的なオプションはオプションですvar observer = new IntersectionObserver(callback);
より簡潔な方法です.ああ、より現実的なシナリオでそれを使用しましょう.次のようになります.
HTMLセットアップ
<div><img data-src=”http://placehold.it/300x300?text=1"></div>
<div><img data-src=”http://placehold.it/300x300?text=2"></div>
<div><img data-src=”http://placehold.it/300x300?text=3"></div>
<div><img data-src=”http://placehold.it/300x300?text=4"></div>
<div><img data-src=”http://placehold.it/300x300?text=5"></div>
<div><img data-src=”http://placehold.it/300x300?text=6"></div>
<div><img data-src=”http://placehold.it/300x300?text=7"></div>
<div><img data-src=”http://placehold.it/300x300?text=8"></div>
<div><img data-src=”http://placehold.it/300x300?text=9"></div>
<div><img data-src=”http://placehold.it/300x300?text=10"></div>
あなたが気づくならば、それは使用しませんsrc
でもdata-src
属性.怠惰なローディングのための1つの戦略は、HTMLdata-*
属性data-src
画像を読み込みません.
CSS設定
.fade {
animation-duration: 3s;
animation-name: fade;
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
この設定はオプションです.私は、我々の観察(それはプラス、より審美的に喜ばせる)がフェードアニメーションでイメージ怠惰な荷を持つのを助けると思います.
あなたがChrome DevToolを使用するならば、イメージがネットワークタブでダウンロードされるとき、あなたはチェックすることができます.
jsセットアップ
私は、それの50 %がviewportと交差するときだけ、イメージをロードしたいです.設定方法
const images = document.querySelectorAll(‘img’)
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if(entry.isIntersecting) {
const target = entry.target
target.setAttribute(‘src’, target.dataset.src)
target.classList.add(‘fade’)
observer.unobserve(target)
}
})
}, {
threshold: 0.5
})
images.forEach(image => observer.observe(image))
私はIntersectionObserverを学習するときに理解するために苦労していたいくつかのことを強調したい.
<div><img data-src=”http://placehold.it/300x300?text=1"></div>
<div><img data-src=”http://placehold.it/300x300?text=2"></div>
<div><img data-src=”http://placehold.it/300x300?text=3"></div>
<div><img data-src=”http://placehold.it/300x300?text=4"></div>
<div><img data-src=”http://placehold.it/300x300?text=5"></div>
<div><img data-src=”http://placehold.it/300x300?text=6"></div>
<div><img data-src=”http://placehold.it/300x300?text=7"></div>
<div><img data-src=”http://placehold.it/300x300?text=8"></div>
<div><img data-src=”http://placehold.it/300x300?text=9"></div>
<div><img data-src=”http://placehold.it/300x300?text=10"></div>
.fade {
animation-duration: 3s;
animation-name: fade;
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
この設定はオプションです.私は、我々の観察(それはプラス、より審美的に喜ばせる)がフェードアニメーションでイメージ怠惰な荷を持つのを助けると思います.あなたがChrome DevToolを使用するならば、イメージがネットワークタブでダウンロードされるとき、あなたはチェックすることができます.
jsセットアップ
私は、それの50 %がviewportと交差するときだけ、イメージをロードしたいです.設定方法
const images = document.querySelectorAll(‘img’)
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if(entry.isIntersecting) {
const target = entry.target
target.setAttribute(‘src’, target.dataset.src)
target.classList.add(‘fade’)
observer.unobserve(target)
}
})
}, {
threshold: 0.5
})
images.forEach(image => observer.observe(image))
私はIntersectionObserverを学習するときに理解するために苦労していたいくつかのことを強調したい.
const images = document.querySelectorAll(‘img’)
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if(entry.isIntersecting) {
const target = entry.target
target.setAttribute(‘src’, target.dataset.src)
target.classList.add(‘fade’)
observer.unobserve(target)
}
})
}, {
threshold: 0.5
})
images.forEach(image => observer.observe(image))
IntersectionObserver
(私はそれを少し奇妙に2回繰り返す必要があることを見つけるimages.forEach
and entries.forEach
, しかし、それが行われる方法です.初期ページロードでは、すべてのエントリが呼び出されます.いくつかのすぐに交差します(ページがレンダリングされたときに、ビューポート内にある場合)いくつかはありません.entry.isIntersecting
画像がビューポートと交差するときにtrueを返します.Intersectionalityのもう一つの一般的なチェックは、そうですentry.intersectionRatio > 0
. src
. から値を転送data-src
to src
ユーザーがそれを見ている前に右.我々は、どちらかとの交差性の量または場所を変えることができます
threshold
or rootMargin
オプション.先祖の要素はrootで変更できます(デフォルトはviewport ).結論
この執筆の時点で、IntersectionObserverはIEを除いて主要なブラウザーで使用可能ですcaniuse 完全なリストのためのサイト.IntersectionObserver
は、データバックからsrcへの値をコールバック時に渡すことで、遅延ポートの要素をビューポートに対して便利である.他の要素にも同様の戦略を適用できる.
以下は記事に関する記事ですIntersectionObserver
私は役に立つ(私はそれらのいずれかと提携していません、ちょうど彼らが与えた情報に感謝します、そして、私はそれがあなたを助けると思います!)
Reference
この問題について(IntersectionObserver APIによる遅延負荷), 我々は、より多くの情報をここで見つけました https://dev.to/iggredible/lazy-loading-with-intersectionobserver-api-3d6hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol