当前位置:首页 > JavaScript

分页实现js

2026-02-01 20:28:53JavaScript

分页实现的基本思路

分页功能通常用于处理大量数据,将数据分成多个页面展示,提升用户体验。前端分页的实现需要结合数据获取和页面渲染逻辑。

客户端分页实现

假设已有完整数据数组,仅需前端分页展示:

// 示例数据
const allData = Array.from({length: 100}, (_, i) => ({id: i+1, content: `Item ${i+1}`}));

// 分页参数
let currentPage = 1;
const pageSize = 10;

// 获取当前页数据
function getCurrentPageData() {
  const start = (currentPage - 1) * pageSize;
  const end = start + pageSize;
  return allData.slice(start, end);
}

// 渲染分页数据
function renderPage() {
  const pageData = getCurrentPageData();
  // 渲染逻辑...
  console.log(`当前页数据:`, pageData);
}

// 分页控件事件
document.getElementById('prev').addEventListener('click', () => {
  if (currentPage > 1) {
    currentPage--;
    renderPage();
  }
});

document.getElementById('next').addEventListener('click', () => {
  if (currentPage < Math.ceil(allData.length / pageSize)) {
    currentPage++;
    renderPage();
  }
});

服务端分页实现

从后端API获取分页数据更为常见,需要传递分页参数:

async function fetchPaginatedData(page, size) {
  const response = await fetch(`/api/data?page=${page}&size=${size}`);
  return response.json();
}

// 使用示例
fetchPaginatedData(1, 10).then(data => {
  console.log('第一页数据:', data.items);
  console.log('总页数:', data.totalPages);
});

分页UI组件实现

结合HTML创建完整分页控件:

<div id="pagination">
  <button id="prev">上一页</button>
  <span id="pageInfo">第1页</span>
  <button id="next">下一页</button>
</div>

<script>
  const pagination = {
    currentPage: 1,
    totalPages: 10,
    updateUI() {
      document.getElementById('pageInfo').textContent = 
        `第${this.currentPage}页/共${this.totalPages}页`;
      document.getElementById('prev').disabled = this.currentPage === 1;
      document.getElementById('next').disabled = this.currentPage === this.totalPages;
    }
  };

  document.getElementById('prev').addEventListener('click', () => {
    if (pagination.currentPage > 1) {
      pagination.currentPage--;
      pagination.updateUI();
      // 加载数据...
    }
  });

  document.getElementById('next').addEventListener('click', () => {
    if (pagination.currentPage < pagination.totalPages) {
      pagination.currentPage++;
      pagination.updateUI();
      // 加载数据...
    }
  });
</script>

分页库的使用

现有库如react-paginate(React)或v-pagination(Vue)可简化开发:

React示例:

分页实现js

import ReactPaginate from 'react-paginate';

function MyComponent() {
  const handlePageClick = (data) => {
    const selectedPage = data.selected + 1;
    console.log('跳转到页:', selectedPage);
  };

  return (
    <ReactPaginate
      previousLabel={'上一页'}
      nextLabel={'下一页'}
      breakLabel={'...'}
      pageCount={20}
      marginPagesDisplayed={2}
      pageRangeDisplayed={5}
      onPageChange={handlePageClick}
      containerClassName={'pagination'}
      activeClassName={'active'}
    />
  );
}

性能优化建议

对于大数据量考虑虚拟滚动技术替代传统分页 分页请求添加防抖处理避免频繁请求 缓存已加载页面数据减少重复请求 预加载相邻页面数据提升用户体验

标签: 分页js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…