当前位置:首页 > 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实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用 Element UI 分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成。需要先安装 Element UI 库。 安装 Ele…

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,适合快速集成。以下是一个示例代码: <template>…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…