当前位置:首页 > JavaScript

js 分页 实现

2026-04-06 05:21:09JavaScript

前端分页实现方法

客户端分页(纯前端) 适用于数据量较小且已全部加载到前端的情况。

将数据数组按每页显示条数分割:

function paginate(array, pageSize, pageNumber) {
  return array.slice((pageNumber - 1) * pageSize, pageNumber * pageSize);
}
const data = [...]; // 总数据
const pageData = paginate(data, 10, 1); // 每页10条,获取第1页

DOM元素分页 隐藏非当前页元素:

function showPage(pageNumber) {
  const items = document.querySelectorAll('.item');
  items.forEach((item, index) => {
    item.style.display = 
      (index >= (pageNumber-1)*10 && index < pageNumber*10) 
      ? 'block' : 'none';
  });
}

后端分页实现方法

AJAX请求分页 通过API获取分页数据:

js 分页 实现

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

// 使用示例
fetchPage(1, 10).then(data => {
  renderTable(data.items);
  renderPagination(data.totalPages);
});

URL参数分页 通过路由参数控制分页:

// 监听路由变化
window.addEventListener('popstate', updatePageFromURL);

function updatePageFromURL() {
  const params = new URLSearchParams(window.location.search);
  const page = parseInt(params.get('page')) || 1;
  loadPage(page);
}

分页组件实现

基础分页控件 创建可交互的分页UI:

function createPagination(totalPages, currentPage) {
  let html = '<div class="pagination">';
  for (let i = 1; i <= totalPages; i++) {
    html += `<button class="${i === currentPage ? 'active' : ''}">${i}</button>`;
  }
  html += '</div>';
  return html;
}

完整示例

js 分页 实现

class Paginator {
  constructor(container, options) {
    this.container = document.querySelector(container);
    this.pageSize = options.pageSize || 10;
    this.currentPage = 1;
    this.data = options.data || [];
    this.render();
  }

  render() {
    const pageData = this.paginate();
    this.container.innerHTML = `
      <div class="data-container">${this.renderItems(pageData)}</div>
      <div class="pagination">${this.renderPagination()}</div>
    `;
    this.bindEvents();
  }

  paginate() {
    return this.data.slice(
      (this.currentPage - 1) * this.pageSize,
      this.currentPage * this.pageSize
    );
  }
}

性能优化技巧

虚拟滚动 处理大量数据时替代分页:

new VirtualScroll({
  container: '#scroll-container',
  rowHeight: 30,
  renderRow: (index) => {
    return `<div>Row ${index + 1}</div>`;
  },
  totalRows: 10000
});

缓存策略 存储已加载的页面数据:

const pageCache = {};

async function getPage(page) {
  if (pageCache[page]) return pageCache[page];

  const data = await fetchPage(page);
  pageCache[page] = data;
  return data;
}

分页样式示例

CSS样式建议

.pagination {
  display: flex;
  gap: 5px;
  margin-top: 20px;
}
.pagination button {
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
}
.pagination button.active {
  background: #007bff;
  color: white;
}

以上方法可根据实际需求组合使用,前端分页适合数据量小的场景,后端分页适合大数据量情况。虚拟滚动可作为分页的替代方案处理超大数据集。

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

相关文章

vue elementui实现分页

vue elementui实现分页

使用 Element UI 实现 Vue 分页功能 Element UI 提供了 el-pagination 组件,可以方便地实现分页功能。以下是具体实现步骤: 安装 Element UI 确保项目…

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常包…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…