JavaScript | slice() を使った ページネーション(ページ分割)サンプル

JavaScript
スポンサーリンク

ここでは、slice() を使って APIから取得したデータをページごとに表示する「実践的ページネーション例」を紹介します。
(初心者でも理解しやすいように、コメントをたっぷり入れています)


🌐 目標:APIデータをページごとに表示!

使うAPI:
👉 JSONPlaceholder
無料のテスト用APIで、ブログ記事っぽいデータが100件取得できます。


💻 実例コード(HTML + JavaScript)

CodePen やブラウザに貼り付けてそのまま動かせます👇

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>slice() × API ページネーション</title>
<style>
  body {
    font-family: sans-serif;
    max-width: 600px;
    margin: 30px auto;
    text-align: center;
  }
  h2 { margin-bottom: 10px; }
  .post {
    border: 1px solid #ccc;
    border-radius: 10px;
    padding: 10px;
    margin: 10px 0;
    text-align: left;
  }
  button {
    margin: 5px;
    padding: 8px 14px;
    font-size: 14px;
    cursor: pointer;
  }
  #pageInfo {
    margin-top: 10px;
  }
</style>
</head>
<body>

<h2>📰 APIデータを slice() でページ分割</h2>
<div id="posts"></div>
<div>
  <button id="prev">◀ 前へ</button>
  <button id="next">次へ ▶</button>
</div>
<div id="pageInfo"></div>

<script>
const apiURL = "https://jsonplaceholder.typicode.com/posts";
const perPage = 5;  // 1ページあたり5件表示
let currentPage = 1;
let allPosts = [];  // ここに全データを入れる

// APIからデータ取得
async function fetchPosts() {
  const res = await fetch(apiURL);
  const data = await res.json();
  allPosts = data;
  showPage(currentPage);
}

// ページ表示関数
function showPage(page) {
  const start = (page - 1) * perPage;
  const end = start + perPage;

  // sliceで必要な分だけ取り出す!
  const pageItems = allPosts.slice(start, end);

  const container = document.getElementById("posts");
  container.innerHTML = "";

  pageItems.forEach(post => {
    const div = document.createElement("div");
    div.className = "post";
    div.innerHTML = `<strong>${post.title}</strong><p>${post.body}</p>`;
    container.appendChild(div);
  });

  const totalPages = Math.ceil(allPosts.length / perPage);
  document.getElementById("pageInfo").textContent = `${page} / ${totalPages} ページ`;
}

// ボタン操作
document.getElementById("prev").onclick = () => {
  if (currentPage > 1) {
    currentPage--;
    showPage(currentPage);
  }
};
document.getElementById("next").onclick = () => {
  const maxPage = Math.ceil(allPosts.length / perPage);
  if (currentPage < maxPage) {
    currentPage++;
    showPage(currentPage);
  }
};

// 読み込み開始!
fetchPosts();
</script>

</body>
</html>
JavaScript

🔍 解説

処理説明
fetch()API からデータを取得(非同期処理)
allPosts = data全データを配列に保存
slice(start, end)現在ページに表示する部分だけ切り出す
Math.ceil(allPosts.length / perPage)総ページ数を計算
ボタンのクリック現在ページを増減して再表示

しくみを図で理解

APIから100件取得
↓
[ {id:1,...}, {id:2,...}, {id:3,...}, ... ]

1ページ目 → slice(0,5)   → 1〜5件
2ページ目 → slice(5,10)  → 6〜10件
3ページ目 → slice(10,15) → 11〜15件
...

slice() がまさに「ページごとに切り分けるハサミ🖋️」の役割をしています!


発展アイデア

このコードをさらに発展させると:

  • ✅ ページ番号ボタン(1, 2, 3…)を動的に生成
  • ✅ 「読み込み中」スピナー表示
  • ✅ 検索・ソート機能を追加
  • ✅ React / Vue / Svelte 版に変換

タイトルとURLをコピーしました