当前位置:首页 > 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;
}

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

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

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

vue实现页面分页

vue实现页面分页

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

vue elementui实现分页

vue elementui实现分页

Vue + ElementUI 分页实现方法 安装与引入 确保已安装 ElementUI,可通过 npm 或 yarn 安装: npm install element-ui 在 main.js 中全…

vue实现分页按钮

vue实现分页按钮

实现分页按钮的基本思路 在Vue中实现分页按钮通常需要结合计算属性、事件绑定和动态样式。核心逻辑包括计算总页数、生成页码数组、处理页码切换事件以及高亮当前页码。 基础实现代码示例 <templ…

vue中实现分页

vue中实现分页

vue中实现分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,适合快速集成。需先安装Element UI库。 安装命令: npm…

vue搜索分页实现

vue搜索分页实现

Vue 搜索分页实现方法 基本思路 搜索分页通常需要结合后端API,前端通过Vue组件实现搜索框、分页器和数据列表的联动。核心逻辑包括:监听搜索输入变化、分页参数变化,触发数据请求并更新视图。 实现…