無限スクロールはしばらく前から存在しています。 基本的な考え方: スクロールすると、新しいコンテンツが下部に読み込まれ、一見無限のスクロールが作成されます。 これを実装するのは簡単ですが、慎重に計画しないとパフォーマンスが低下します。 コンテンツを数回再フェッチすると、数百の DOM 要素 (その多くは非表示) が存在する可能性があります。 幸いなことに、これを軽減するパターンが存在するため、Angular を使用してパターンを検討していきます。
これは避けたいことです。
仮想スクロール
仮想スクロールでは、無限スクロールとは異なり、常に大きなリストのサブセットのみが表示されます。 すべてを一度にレンダリングするのは非効率である大規模なデータセットに最適です。 可視 (および可視に近い) アイテムのみがレンダリングされます。ユーザーがスクロールすると、項目が動的に入れ替わります。 これにより DOM 要素が大幅に削減され、パフォーマンスが向上します。
仮想スクロールは、ビューポートの高さに一致するコンテナを作成することで機能します。 表示可能なアイテム (およびバッファ) のみが、CSS を介して管理され、特定のスクロール深度でこのコンテナ内にレンダリングされます。 スクロールするとコンテナが更新され、新しいアイテムが表示されたり、表示されなくなったアイテムが削除されたり、スクロールの深さが調整されます。 これを無限スクロールと組み合わせると、パフォーマンスを犠牲にすることなく事実上無限のリストが作成されます。
以下の例は数千の項目のリストを示していますが、一度に最大 8 つの項目をレンダリングします。 スクロールすると CSS スクロールの高さが調整され、リストがより長くなったように見えます。
実際の例
Reddit のページ分割された API からメディアを取得し、それを仮想スクロール リストに表示する Angular アプリケーションを構築してみましょう。 これには、サブレディットを選択するための検索バーとフィルターが含まれます。 下にスクロールすると、さらにコンテンツが読み込まれます。 私たちの主な要件:
- RxJS Observables と非同期パイプによって駆動されます。
- サブレディットまたはフィルターの変更時にコンテンツをリセットしますが、新しいコンテンツの追加時にはリセットしません。
- 以前のコンテンツをメモリに保存し、冗長な API 呼び出しを行わずにシームレスな上下スクロールを実現します。
@angular/cdk
パッケージ (仮想スクローラー コンポーネントを含む) を使用します。 npm i @angular/cdk
.
この例では Angular を使用していますが、同様のパターンは React、Vue、またはバニラ JavaScript にも適用できます。基礎となる原理を説明する基本的なデモは、ここから入手できます。
サービスのセットアップ
まず、Angular の HttpClient
と RxJS Observable を使用して Reddit API からコンテンツを取得し、サブレディット名とフィルターを管理するサービスを作成します。 (簡潔にするために一部のコードは省略されています。完全な実装はここにあります)。
// ... (Omitted for brevity) ...
コンテンツ取得メソッドは、データ要求中に特定のプロパティを追跡します。 page
プロパティがクエリ文字列に追加され、最後の項目の後に新しいコンテンツがフェッチされるようになります。 また、NSFW コンテンツや投稿ヒントのないアイテムも除外します。これにより、期待されるコンテンツのみが表示されるようになります。
// ... (Omitted for brevity) ...
query$
オブザーバブル (以前は省略されていました) は、コンテンツを取得する前に、さまざまなオブザーバブル ストリームをマージします。 scan
演算子は、以前のストリーム結果と現在のストリーム結果を結合し、複数のページにわたる大きなデータ配列を構築します。
これにより、広範囲にわたるスクロールが可能になります。サブレディット名またはフィルターの変更のみが完全な再取得をトリガーします。 nextPage
のプロパティである query$
には、現在のセットの最後の項目 ID が格納されます。これは、仮想スクローラーの下部に近づいたときに、次にどのページをフェッチするかを決定するために使用されます。
// ... (Omitted for brevity) ...
RxJS の威力は、データ ストリームの結合と操作にあります。これにより、ビジネス ロジックがコンポーネントに到達する前に処理できるようになり、コンポーネントをクリーンで再利用可能な状態に保つことができます。
コンポーネントのセットアップ
次に、Angular の CdkVirtualScrollViewport
を使用してコンテンツを表示するコンポーネントを設定します。 メソッドはビューポートの下部付近のスクロールを処理し、subRedditPage$
オブザーバブルを介して次のページを取得します。
// ... (Omitted for brevity) ...
テンプレートは、非同期パイプを使用して query$
をサブスクライブします。 注: 仮想スクローラーは、高さが可変のコンテンツではさらに複雑になります。パフォーマンスを向上させるために、アイテムの高さを一定にすることをお勧めします。
// ... (Omitted for brevity) ...
onScroll
メソッドは、ユーザーが一番下に近づくと、より多くのコンテンツを取得します。 nextPage
ID (query$
から) を使用して subRedditPage$
に送信し、次の API 呼び出しをトリガーして、query$
経由でリストを更新します。
// ... (Omitted for brevity) ...
検索バーとタブのコントロールも統合されています (以下の単純な例)。
// ... (Omitted for brevity) ...
結論
これにより、実質的に無限のスクローラーが作成されます。 ここでテストできます。 Reddit の API にはレート制限があります。テスト中にぶつかる可能性があります。 追加機能などの詳細については、GitHub リポジトリこちらをご覧ください。
以上がAngular による実質的に無限のスクロールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

CSSグリッドは、複雑で応答性の高いWebレイアウトを作成するための強力なツールです。設計を簡素化し、アクセシビリティを向上させ、古い方法よりも多くの制御を提供します。

記事では、レスポンシブデザインにおけるスペースの効率的なアラインメントと分布のためのレイアウト方法であるCSS FlexBoxについて説明します。 FlexBoxの使用量を説明し、CSSグリッドと比較し、ブラウザのサポートを詳細に説明します。

この記事では、ビューポートメタタグ、柔軟なグリッド、流体メディア、メディアクエリ、相対ユニットなど、CSSを使用してレスポンシブWebサイトを作成するための手法について説明します。また、CSSグリッドとフレックスボックスを使用してカバーし、CSSフレームワークを推奨しています

この記事では、要素の寸法の計算方法を制御するCSSボックスサイズのプロパティについて説明します。コンテンツボックス、ボーダーボックス、パディングボックスなどの値と、レイアウト設計とフォームアライメントへの影響について説明します。

記事では、CSS、キープロパティ、およびJavaScriptとの組み合わせを使用してアニメーションの作成について説明します。主な問題は、ブラウザの互換性です。

記事では、3D変換、主要なプロパティ、ブラウザの互換性、およびWebプロジェクトのパフォーマンスに関する考慮事項にCSSを使用して説明します。

この記事では、CSSグラデーション(線形、放射状、繰り返し)を使用して、ウェブサイトのビジュアルを強化し、深さ、フォーカス、および現代の美学を追加します。

記事では、CSSの擬似要素、HTMLスタイリングの強化における使用、および擬似クラスとの違いについて説明します。実用的な例を提供します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Dreamweaver Mac版
ビジュアル Web 開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール
