概要
Web サイトまたは Web アプリケーションを作成するとき、特に多くの機能を備えている場合 テンプレート化 コンテンツ (カテゴリに属するグリッドや項目のリストなど) – 一般的には、 ページに分けて 一度に画面に表示されるアイテムの数を減らす。
この記事では、基本的な JavaScript を使用して Web プロジェクトにページネーションを実装する方法を一から学びます。
この記事の目的のために、コンテンツを取得します この API レスポンスの例。 100 個のデータ ポイントが含まれていますが、30 個しか使用せず、一度に画面に 6 つの投稿を表示します。
スタートガイド
ブラウザーに組み込まれている Fetch API を使用して API から必要なすべての投稿をフェッチする前に、後でスクリプトを介して動的に入力される基本的な HTML マークアップを作成する必要があります。
<div class="container"> <div class="title-section"> <h1 class="title">Posts</h1> </div> <div class="posts-section"></div> <div class="pagination-section"> <ul class="pagination"> <li class="page-item prev"><a class="page-link" href="#">Previous</a></li> <li class="page-item next"><a class="page-link" href="#">Next</a></li> </ul> </div>
</div>
REST API 投稿の取得
前述のように、ページネーションとは、コンテンツを小さなチャンクに分割することです。 データをフェッチし、分割するタイミングと方法を決定し、ページ数を計算して、その一部をユーザーに表示する必要があります。 ありがたいことに、通常、バックエンド機能が最初のいくつかのタスクを処理し、関連するページ、ページの総数、およびコンテンツを返します。 1ページあたり.
注: 使用している特定の API によっては、結果を遅延読み込みできる場合とできない場合があります。 可能な限り、すべてを事前にロードするのではなく、遅延ロードの結果を優先します。 最新の API のほとんどは、 limit
or page
カウントし、ユーザーに表示できるページの総数を返します。
最初にすべての投稿を取得することから始めましょう。その後、ページごとにいくつかのデータ ポイントのみをクエリするようにこれを修正します。
const postsSection = document.querySelector(".posts-section"); const fetchPosts = async () => { const response = await fetch( "https://jsonplaceholder.typicode.com/posts" ); const posts = await response.json(); postsSection.innerHTML = ""; posts.forEach((post) => { postsSection.innerHTML += ` <div class="posts-card"> <div class="post-title"> <h2 class="post-title-text">${post.title}</h2> </div> <div class="post-body"> <p class="post-body-text"> ${post.body} </p> </div> </div> `; });
}; fetchPosts();
上記のコードを簡単に調べてみましょう。 まず、取得することから始めました。 div
を介してすべてのコンテンツを表示する要素 class
に割り当てた名前 div
. 最後に、フェッチ操作を処理する関数を作成しました。
fetchPosts()
関数、使用した APIをフェッチ から投稿を取得するには JSON プレースホルダー投稿 APIによって参照される JSON データを保存します。 posts
変数と使用された innerHTML
各コンテンツを posts-section
それらをループすることによって。
この時点で、すべてのコンテンツを正常に取得できました。
注: 別の方法を使用してコンテンツを取得することもできますが、ページネーションの作成に入る前に、すべてのコンテンツがそのページに読み込まれていることを確認してください。
Web ページ内でページネーションを実装するために重要な XNUMX つの変数を宣言することから始めましょう。 最初のものは、 ページごとに宣言したい投稿の数、 そうして 現在のページ番号 (1
デフォルトで)、および 総ページ数.
注: 開始 API およびデータベースからデータを使用する場合、 総数 通常、ページまたはデータ ポイントの数が返されます。 総ページ数が得られない場合は、総オブジェクト数とページ サイズから計算できます。
このガイドでは、 総ページ数 固定数 30
:
const numberPerPage = 6;
var pageNumber = 1;
var numberOfPages = 30;
前のセクションでは、すべての投稿を XNUMX つのページに表示しましたが、一度に XNUMX つだけ表示したいと考えています。 したがって、 numberPerPage
〜へ 6
これを使用してフェッチ操作を調整し、表示のみを行います 6
投稿。
特定の実装に依存しますが、API から結果をフェッチするときにクエリ パラメータを使用できるようにすることは広く行われています。 ページ 結果の。 たとえば、私たちが使用しているモック REST API では、 page
および limit
特定の時間に表示するバッチのみをロードできるパラメーター。
このようにして、ユーザーに表示したいデータのみをロードします! 次に、読み込み時間を短縮するために次のページをプリフェッチするか、表示するデータのみを読み込むことで達成される計算スピードアップを楽しむことができます。
これらのパラメーターを使用して、フェッチ リクエストを修正します。
const fetchPosts = async (pageNumber) => { const response = await fetch( `https://jsonplaceholder.typicode.com/posts?_page=${pageNumber}&_limit=${numberPerPage}` ); const posts = await response.json(); postsSection.innerHTML = ""; posts.forEach((post) => { postsSection.innerHTML += ` <div class="posts-card"> <div class="post-title"> <h2 class="post-title-text">${post.title}</h2> </div> <div class="post-body"> <p class="post-body-text"> ${post.body} </p> </div> </div> `; });
}; fetchPosts();
上記のコードでは、API エンドポイントに XNUMX つのパラメーターを追加しました。 pageNumber
と ページあたりの投稿数 これにより、投稿をいくつかのページに分割し、これらの投稿をページ番号に基づいて表示できるようになります。
さらに、 pageNumber
fetchPosts()
これにより、ページが変更されるたびにこの関数を呼び出すことができます。
ページの下部にあるページ ナビゲーション ボタンに機能を追加し、ページ番号に基づいて適切なコンテンツを表示します。
マークアップに、ページネーション ボタンを表示するセクションがあることがわかります。
<div class="pagination-section"> <ul class="pagination"> <li class="page-item prev"><a class="page-link" href="#">Previous</a></li> <li class="page-item next"><a class="page-link" href="#">Next</a></li> </ul>
</div>
これから追加します click
各ボタンにイベントを追加して、クリックするとそのページのコンテンツが表示されるようにします。
の実装 前へ ボタン
ここでのロジックは非常に単純です。 必要なのは、要素を表す要素を取得することだけです。 前のボタン、追加 click
イベントリスナーを追加し、ボタンがクリックされたときに適切なコンテンツを表示します:
ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!
const prev = document.querySelector('.prev');
prev.addEventListener('click', (e) => { e.preventDefault(); if (pageNumber > 1) { pageNumber--; fetchPosts(pageNumber); }
});
を追加した後 click
イベントリスナー、現在のページ番号がより大きいかどうかを確認しました 1
コールバック関数で。 数が以下の場合 1
、現在のコンテンツを表示し続けます。 ただし、現在のページ番号がより大きい場合 1
その値を自由にデクリメントして、 fetchPosts(pageNumber)
引数として渡された新しいページ番号を持つ関数。したがって、前のページのコンテンツが表示されます。
の実装 Next ボタン
ここでのロジックは、 前 ボタンにいくつかの小さな変更を加えただけです。 もちろん、クラスでリスト要素を取得します next
prev
. また、現在のページ番号が ページ数 私たちが設定した 30
以前に手動で。 最後に、現在のページ番号をデクリメントする代わりにインクリメントします。
const next = document.querySelector(".next");
next.addEventListener("click", (e) => { e.preventDefault(); if (pageNumber < numberOfPages) { pageNumber++; fetchPosts(pageNumber); }
});
まとめ
Web アプリケーションでデータベースやその他のデータ ソースを表示しようとする場合は常に、コンテンツをより小さく管理しやすいチャンクに分割して個別に表示することが重要です。
この記事では、外部ライブラリやツールを使用せずに、JavaScript を使用してゼロからページネーションを実装する方法を調べました。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- Platoblockchain。 Web3メタバースインテリジェンス。 知識の増幅。 こちらからアクセスしてください。
- 情報源: https://stackabuse.com/pagination-in-vanilla-javascript/
- 1
- 100
- 11
- 7
- 9
- a
- できる
- 私たちについて
- 上記の.
- 達成
- 実際に
- 追加されました
- 警告
- すべて
- 全ての記事
- ことができます
- および
- API
- API
- 現れる
- 申し込み
- 適切な
- 引数
- 記事
- 割り当てられた
- バック
- バックエンド
- ベース
- 基本
- 始まった
- 国境
- ボトム
- ブラウザ
- 内蔵
- (Comma Separated Values) ボタンをクリックして、各々のジョブ実行の詳細(開始/停止時間、変数値など)のCSVファイルをダウンロードします。
- 計算された
- コール
- これ
- カテゴリー
- 一定
- 変更
- チェック
- class
- コード
- 完全に
- 結論
- コンテナ
- 含まれています
- コンテンツ
- コース
- 作ります
- 作成
- 重大な
- 重大な
- 電流プローブ
- データ
- データポイント
- データベース
- デフォルト
- によっては
- 依存
- 異なります
- ディスプレイ
- ディスプレイ
- 各
- 前
- どちら
- エンドポイント
- 特に
- イベント
- イベント
- 例
- 外部
- 速いです
- 特徴
- フェッチ
- 少数の
- 埋め
- 最後に
- 名
- 固定の
- フォーカス
- から
- function
- 機能性
- 一般に
- 取得する
- GIF
- Gitの
- 与える
- 与えられた
- 行く
- 良い
- 大きい
- グリッド
- 陸上
- ガイド
- ハンドル
- 実践的な
- 助けます
- こちら
- ホバー
- 認定条件
- How To
- HTML
- HTTPS
- ICON
- アイデア
- 実装する
- 実装
- 実装
- in
- 含まれました
- 個別に
- を取得する必要がある者
- 概要
- IT
- リーディングシート
- JavaScriptを
- JSON
- キープ
- LEARN
- 学習
- LG
- ライブラリ
- リスト
- 負荷
- ローディング
- 見て
- たくさん
- make
- 作成
- 手動で
- 言及した
- 方法
- マイナー
- モダン
- 他には?
- 最も
- 名
- ナビゲーション
- 必要
- 新作
- 次の
- 数
- オブジェクト
- 入手
- ONE
- 操作
- その他
- ページネーション
- パラメータ
- 渡された
- ピース
- プレースホルダー
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- ポイント
- ポイント
- 可能
- 投稿
- 実用的
- 練習
- プラクティス
- 好む
- かなり
- 前
- プロジェクト(実績作品)
- 財産
- 目的
- すぐに
- RE
- 受け取ります
- 減らします
- 関連した
- 表します
- 要求
- の提出が必要です
- 必要
- 応答
- REST
- 結果
- return
- リング
- 同じ
- 画面
- セクション
- セッションに
- いくつかの
- Shadow
- 表示する
- 示す
- 簡単な拡張で
- SIX
- サイズ
- より小さい
- So
- ソース
- 特定の
- split
- スタックアバス
- 規格
- 開始
- Force Stop
- 店舗
- 首尾よく
- そのような
- SVG
- 取り
- タスク
- したがって、
- 三
- 介して
- 時間
- 役職
- 〜へ
- 豊富なツール群
- トータル
- 遷移
- true
- us
- つかいます
- ユーザー
- 通常
- 値
- Ve
- 、
- ウェブ
- ウェブアプリケーション
- ウェブサイト
- かどうか
- which
- 意志
- 以内
- 無し
- ワーキング
- でしょう
- You
- あなたの
- ゼファーネット