当前位置:首页 > JavaScript

如何用js实现分页

2026-03-01 10:06:17JavaScript

分页的基本实现思路

分页功能通常涉及前端展示和数据分割两部分。以下是一个基于JavaScript的简单分页实现方法,适用于前端数据分页或配合后端API的分页请求。

定义分页参数

const pagination = {
  currentPage: 1,    // 当前页码
  itemsPerPage: 10,  // 每页显示数量
  totalItems: 0,     // 总数据量
  totalPages: 0      // 总页数
};

计算总页数

根据总数据量和每页显示数量计算总页数:

function calculateTotalPages(totalItems, itemsPerPage) {
  return Math.ceil(totalItems / itemsPerPage);
}

pagination.totalPages = calculateTotalPages(pagination.totalItems, pagination.itemsPerPage);

获取当前页数据

如果是前端分页,从完整数据中截取当前页的数据:

function getCurrentPageData(allData, currentPage, itemsPerPage) {
  const startIndex = (currentPage - 1) * itemsPerPage;
  const endIndex = startIndex + itemsPerPage;
  return allData.slice(startIndex, endIndex);
}

渲染分页控件

创建一个基本的分页UI控件:

如何用js实现分页

function renderPagination(pagination) {
  const paginationContainer = document.getElementById('pagination');
  paginationContainer.innerHTML = '';

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

  // 页码按钮
  for (let i = 1; i <= pagination.totalPages; i++) {
    const pageBtn = document.createElement('button');
    pageBtn.textContent = i;
    if (i === pagination.currentPage) {
      pageBtn.disabled = true;
    }
    pageBtn.addEventListener('click', () => {
      pagination.currentPage = i;
      updatePagination();
    });
    paginationContainer.appendChild(pageBtn);
  }

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

更新分页状态

当页码变化时更新分页状态和显示数据:

function updatePagination() {
  // 获取新页数据
  const currentData = getCurrentPageData(allData, pagination.currentPage, pagination.itemsPerPage);

  // 重新渲染分页控件
  renderPagination(pagination);

  // 更新数据显示
  renderData(currentData);
}

配合后端API的分页实现

如果数据来自后端API,通常需要将分页参数传递给API:

如何用js实现分页

async function fetchPaginatedData(page, perPage) {
  try {
    const response = await fetch(`/api/data?page=${page}&per_page=${perPage}`);
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('Error fetching data:', error);
    return [];
  }
}

分页优化技巧

添加页面跳转输入框:

const gotoInput = document.createElement('input');
gotoInput.type = 'number';
gotoInput.min = 1;
gotoInput.max = pagination.totalPages;
gotoInput.placeholder = '跳转到';

const gotoBtn = document.createElement('button');
gotoBtn.textContent = '跳转';
gotoBtn.addEventListener('click', () => {
  const page = parseInt(gotoInput.value);
  if (page >= 1 && page <= pagination.totalPages) {
    pagination.currentPage = page;
    updatePagination();
  }
});
paginationContainer.appendChild(gotoInput);
paginationContainer.appendChild(gotoBtn);

响应式分页

根据屏幕尺寸调整每页显示数量:

function adjustItemsPerPage() {
  if (window.innerWidth < 768) {
    pagination.itemsPerPage = 5;
  } else {
    pagination.itemsPerPage = 10;
  }
  pagination.totalPages = calculateTotalPages(pagination.totalItems, pagination.itemsPerPage);
  updatePagination();
}

window.addEventListener('resize', adjustItemsPerPage);

分页样式建议

为分页控件添加基本CSS样式:

#pagination {
  display: flex;
  gap: 5px;
  margin-top: 20px;
}

#pagination button {
  padding: 5px 10px;
  cursor: pointer;
}

#pagination button:disabled {
  background-color: #ccc;
  cursor: default;
}

#pagination input {
  width: 50px;
  text-align: center;
}

以上实现提供了一个完整的分页功能解决方案,可以根据实际需求进行调整和扩展。

标签: 分页如何用
分享给朋友:

相关文章

vue实现后台分页

vue实现后台分页

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

vue实现列表分页

vue实现列表分页

Vue 列表分页实现方法 基础分页实现 安装依赖(如使用第三方库) npm install vue-paginate 模板部分示例 <template> <div>…

vue加载实现分页

vue加载实现分页

Vue 实现分页加载的方法 使用 Element UI 的分页组件 安装 Element UI 后,可以直接使用其分页组件。在模板中添加分页组件,并绑定相关事件和数据。 <template&…

vue分页插件实现

vue分页插件实现

Vue 分页插件实现方法 使用现成组件库(推荐) Element UI、Ant Design Vue 等主流库已提供成熟分页组件,可直接集成: <template> <el-…

vue实现网页分页

vue实现网页分页

Vue 实现网页分页的方法 使用计算属性实现分页 在 Vue 中可以通过计算属性对数据进行分页处理。定义一个 currentPage 和 pageSize,利用计算属性返回当前页的数据。 data…

vue完整实现分页

vue完整实现分页

Vue 分页组件实现 分页组件模板 分页组件通常包含页码按钮、上一页/下一页按钮和跳转功能。以下是一个基础模板结构: <template> <div class="pagina…