要素の高さに関連するプロパティ
4260 ワード
きっかけ
無限スクロールを実施する場合、他のデータをロードする時点は、最後のコンテンツが終了する時点でなければなりません.
無限スクロールを実現し、
ドキュメントの合計高さから現在のビューの高さを差し引いた値とスクロールの高さを比較することで、ドキュメントの最後の高さを判断します.
使用するコード:
const {scrollHeight,clientHeight,scrollTop} = document.documentElement;
const degree = scrollTop / (scrollHeight-clientHeight);
if ( degree == 1 ) { ... }
あるいはconst {scrollHeight,clientHeight,scrollTop} = document.documentElement;
if ( clientHeight + scrollTop === scrollHeight ) { ... }
質問です。
無限スクロール機能を使用したモバイル環境では、PCよりもページズームを頻繁に使用しています.
しかし、ページが縮小するにつれて、ドキュメントの末尾に達しても.
clientHeight + scrollTop
とscrollHeight
が一致しないという問題が発生した.そのため、様々なサイズやスクロールに関する値を整理する必要があると思います.
いろいろなサイズの装飾
コメントブログ
client~
element.clinetHeight
およびelement.clientWidth
ダウンジャケットを含むサイズを入力します.ビューア、スクロールバー以外の実際の内部コンテンツが占めるサイズ.
offset~
element.offsetHeight
およびelement.offsetWidth
ダウンジャケット、ボーリングベッド、スクロールバーなどの寸法を取得します.画面にエンティティが占めるサイズが表示されます.
element.scrollHeight
およびelement.scrollWidth
画面上の領域を考慮せずに、実際のエンティティのサイズを取得します.現在表示されていないスクロールバーが非表示になっている領域のサイズが含まれます.
要素のスクロール度合い
scrollTop
element.scrollTop
で、一番上からどれだけ転がっているかがわかります.ドキュメントの上部から現在のビューまでの距離なので、下図のスクロールと同じ高さです.
scrollLeft
element.scrollLeft
は一番左に何回転がっていますか.問題を解決する
次に、スケールが正しい値を与えていない理由を見てみましょう.
拡大または縮小すると、以前に表示したサイズが変わります.
拡大すると、大きく見えるのではなく、見える領域が減少します.
clientHeight
とスクロール単位が減少します.同じスクロールでも、より小さな部分がチェックされるため、スクロールの単位が小さくなります.
このため、最後までスクロールすると小数点レベルの誤差が発生します.
しかし、
scrollTop + clientHeight
対scrollHeight
大きな場合にのみ発生するため、以下の条件を変更しました.if ( scrollTop + clientHeight >= scrollHeight ) {...}
Reference
この問題について(要素の高さに関連するプロパティ), 我々は、より多くの情報をここで見つけました https://velog.io/@hanganda23/무한-스크롤-개선テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol