当前位置:首页 > JavaScript

分页实现js

2026-03-14 19:42:50JavaScript

分页实现的基本原理

分页功能通常用于数据量较大的场景,将数据分割成多个页面展示。核心逻辑包括计算总页数、当前页数据切片、页码按钮生成等。

分页实现js

纯前端分页实现

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

分页实现js

// 示例数据
const allData = [...Array(100).keys()].map(i => ({ id: i, name: `Item ${i}` }));

// 分页配置
const paginate = (data, currentPage = 1, perPage = 10) => {
  const totalItems = data.length;
  const totalPages = Math.ceil(totalItems / perPage);
  const startIdx = (currentPage - 1) * perPage;
  const paginatedData = data.slice(startIdx, startIdx + perPage);

  return {
    currentPage,
    perPage,
    totalPages,
    totalItems,
    data: paginatedData
  };
};

// 使用示例
const result = paginate(allData, 2);
console.log(result.data); // 获取第二页数据

动态渲染分页控件

function renderPagination(totalPages, currentPage) {
  const container = document.getElementById('pagination');
  container.innerHTML = '';

  // 上一页按钮
  if (currentPage > 1) {
    const prevBtn = document.createElement('button');
    prevBtn.textContent = 'Previous';
    prevBtn.addEventListener('click', () => updatePage(currentPage - 1));
    container.appendChild(prevBtn);
  }

  // 页码按钮
  for (let i = 1; i <= totalPages; i++) {
    const pageBtn = document.createElement('button');
    pageBtn.textContent = i;
    if (i === currentPage) {
      pageBtn.classList.add('active');
    }
    pageBtn.addEventListener('click', () => updatePage(i));
    container.appendChild(pageBtn);
  }

  // 下一页按钮
  if (currentPage < totalPages) {
    const nextBtn = document.createElement('button');
    nextBtn.textContent = 'Next';
    nextBtn.addEventListener('click', () => updatePage(currentPage + 1));
    container.appendChild(nextBtn);
  }
}

结合AJAX的后端分页

当数据量非常大时,建议采用后端分页:

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

  renderData(data);
  renderPagination(Math.ceil(total / size), page);
}

// 调用示例
fetchPaginatedData(1);

分页组件优化建议

  • 添加页码省略功能(当页数过多时显示...)
  • 支持自定义每页显示数量
  • 加入加载状态指示器
  • 实现URL同步(保持浏览器地址栏与当前页码同步)
// URL同步示例
function updatePage(page) {
  window.history.pushState({}, '', `?page=${page}`);
  fetchPaginatedData(page);
}

// 监听popstate事件
window.addEventListener('popstate', () => {
  const urlParams = new URLSearchParams(window.location.search);
  const page = urlParams.get('page') || 1;
  fetchPaginatedData(page);
});

常见分页样式实现

对于不同的UI需求,可以调整分页控件的样式:

.pagination button {
  margin: 0 5px;
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
}

.pagination button.active {
  background: #007bff;
  color: white;
  border-color: #007bff;
}

以上代码提供了从基础到进阶的分页实现方案,可根据实际项目需求进行调整和扩展。

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

相关文章

vue分页实现

vue分页实现

实现Vue分页的几种方法 使用Element UI的分页组件 安装Element UI库后,可以直接使用其分页组件。以下是一个基本示例: <template> <div>…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

vue实现选项卡分页

vue实现选项卡分页

实现选项卡分页的基本思路 在Vue中实现选项卡分页功能,可以通过动态组件或条件渲染结合数据绑定完成。核心逻辑是维护一个当前激活的选项卡状态,根据用户点击切换内容。 使用v-if条件渲染 通过v-if…

vue分页实现

vue分页实现

Vue 分页实现方法 基础分页组件实现 创建一个简单的分页组件,包含上一页、下一页和页码按钮。组件接收当前页码、总页数等参数,通过事件通知父组件页码变化。 <template> &l…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现百叶窗

js实现百叶窗

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