JS分頁代碼實例詳解

分頁是Web開發中常見的功能,因為它可以幫助用戶更好地瀏覽大量數據。JS分頁是其中的一種實現方式,它通過JavaScript代碼對數據進行分頁處理,再通過DOM操作將分頁後的數據呈現在頁面上。

一、實現原理

JS分頁的實現原理很簡單,主要分為以下幾個步驟:

1、獲取數據。


const data = [
  {name: '張三', age: 25, gender: '男'},
  {name: '李四', age: 30, gender: '女'},
  {name: '王五', age: 28, gender: '男'},
  {name: '趙六', age: 32, gender: '女'},
  // ... 更多數據
];

2、計算總頁數。


const pageSize = 3; // 每頁顯示3條數據
const total = data.length; // 數據總條數
const totalPages = Math.ceil(total / pageSize); // 總頁數

3、生成分頁器。


const pager = document.querySelector('#pager');
for (let i = 1; i <= totalPages; i++) {
  const button = document.createElement('button');
  button.innerHTML = i;
  pager.appendChild(button);
}

4、根據當前頁數顯示數據。


function showData(pageNo) {
  const startIndex = (pageNo - 1) * pageSize;
  const endIndex = startIndex + pageSize;
  const pageData = data.slice(startIndex, endIndex);
  // 根據需求將數據呈現在頁面上
}

5、監聽分頁器按鈕的點擊事件,更新當前頁數並顯示對應的數據。


pager.addEventListener('click', function(event) {
  if (event.target.tagName === 'BUTTON') {
    const pageNo = parseInt(event.target.innerHTML);
    showData(pageNo);
  }
});

二、實現方法

我們可以將上述原理,利用函數和對象的封裝,封裝成JS分頁代碼。以下是一種常見的實現方法。


function Pagination(selector, options) {
  this.container = document.querySelector(selector);
  this.current = options.current || 1;
  this.pageSize = options.pageSize || 10;
  this.total = options.total || 0;
  this.totalPages = Math.ceil(this.total / this.pageSize);
  this.onPageChange = options.onPageChange || function() {};

  this.init = function() {
    this.container.innerHTML = '';

    const prevButton = document.createElement('button');
    prevButton.innerHTML = '上一頁';
    prevButton.disabled = this.current === 1;
    this.container.appendChild(prevButton);

    const pager = document.createElement('div');
    pager.className = 'pager';
    for (let i = 1; i  {
      if (this.current > 1) {
        this.current--;
        this.render();
        this.onPageChange(this.current);
      }
    });

    nextButton.addEventListener('click', () => {
      if (this.current  {
      if (event.target.tagName === 'BUTTON') {
        const pageNo = parseInt(event.target.innerHTML);
        if (pageNo !== this.current) {
          this.current = pageNo;
          this.render();
          this.onPageChange(this.current);
        }
      }
    });
  };

  this.render = function() {
    const pager = this.container.querySelector('.pager');
    for (let i = 0; i  {
    console.log('當前頁數為:' + pageNo);
  }
});

代碼中,我們通過實現一個Pagination對象,將分頁的各項操作封裝了起來。它接受兩個參數,分別是選擇器selector和配置對象options。options中包含四個屬性,分別是當前頁數current、每頁數據量pageSize、數據總條數total和分頁器按鈕被點擊時的回調函數onPageChange。Pagination對象同時擁有兩個方法,init方法用於生成分頁器,render方法用於更新分頁器狀態。

三、實現效果

最後,我們來看看JS分頁的實現效果。以下是一個簡單的例子,演示分頁器的生成和數據的顯示。


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JS分頁代碼實例</title>
  <style>
    #pager {
      display: flex;
      align-items: center;
      margin-bottom: 20px;
    }
    button {
      margin-right: 5px;
    }
    button.active {
      background-color: #337ab7;
      color: white;
    }
    .data {
      display: none;
    }
    .data.active {
      display: block;
    }
    table {
      border-collapse: collapse;
      margin-bottom: 20px;
    }
    th, td {
      padding: 10px;
      border: 1px solid #ddd;
    }
  </style>
</head>
<body>
  <div id="pager"></div>
  <div class="data">
    <table>
      <thead>
        <tr>
          <th>姓名</th>
          <th>年齡</th>
          <th>性別</th>
        </tr>
      </thead>
      <tbody></tbody>
    </table>
  </div>

  <script>
    const data = [
      {name: '張三', age: 25, gender: '男'},
      {name: '李四', age: 30, gender: '女'},
      {name: '王五', age: 28, gender: '男'},
      {name: '趙六', age: 32, gender: '女'},
      {name: '錢七', age: 29, gender: '男'},
      {name: '孫八', age: 26, gender: '女'},
      {name: '周九', age: 31, gender: '男'},
      {name: '吳十', age: 27, gender: '女'}
    ];

    const pager = new Pagination('#pager', {
      current: 1,
      pageSize: 3,
      total: data.length,
      onPageChange: pageNo => {
        showData(pageNo);
      }
    });

    function showData(pageNo) {
      const startIndex = (pageNo - 1) * pager.pageSize;
      const endIndex = startIndex + pager.pageSize;
      const pageData = data.slice(startIndex, endIndex);

      const tbody = document.querySelector('.data table tbody');
      tbody.innerHTML = '';
      for (let i = 0; i < pageData.length; i++) {
        const tr = document.createElement('tr');
        const td1 = document.createElement('td');
        td1.innerHTML = pageData[i].name;
        tr.appendChild(td1);
        const td2 = document.createElement('td');
        td2.innerHTML = pageData[i].age;
        tr.appendChild(td2);
        const td3 = document.createElement('td');
        td3.innerHTML = pageData[i].gender;
        tr.appendChild(td3);
        tbody.appendChild(tr);
      }
      document.querySelector('.data').classList.add('active');
    }

    showData(pager.current);
  </script>
</body>
</html>

在瀏覽器中打開上述代碼,即可看到一個實現了數據分頁展示的頁面。

總結

JS分頁是Web開發中常用的數據分頁展示方式,它可以幫助用戶更好地瀏覽大量數據。我們可以通過簡單的JavaScript代碼,實現分頁的各項功能,包括數據獲取、總頁數計算、分頁器生成和當前頁數據顯示等。同時,我們也可以通過對象和函數的封裝,將分頁的各項功能進行統一封裝,並實現可配置的分頁器。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293704.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:14

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29

發表回復

登錄後才能評論