当前位置:首页 > JavaScript

js前端实现分页

2026-04-04 09:01:22JavaScript

前端分页实现方法

客户端分页(适用于数据量较小的情况) 将全部数据加载到前端,通过JavaScript计算分页逻辑。

// 示例数据
const allData = [...]; // 假设这是全部数据
const pageSize = 10; // 每页显示数量
let currentPage = 1; // 当前页码

// 计算分页数据
function getPaginatedData() {
  const startIndex = (currentPage - 1) * pageSize;
  const endIndex = startIndex + pageSize;
  return allData.slice(startIndex, endIndex);
}

// 渲染分页控件
function renderPagination() {
  const totalPages = Math.ceil(allData.length / pageSize);
  let paginationHTML = '';

  // 上一页按钮
  if (currentPage > 1) {
    paginationHTML += `<button onclick="changePage(${currentPage - 1})">上一页</button>`;
  }

  // 页码按钮
  for (let i = 1; i <= totalPages; i++) {
    paginationHTML += `<button class="${i === currentPage ? 'active' : ''}" onclick="changePage(${i})">${i}</button>`;
  }

  // 下一页按钮
  if (currentPage < totalPages) {
    paginationHTML += `<button onclick="changePage(${currentPage + 1})">下一页</button>`;
  }

  document.getElementById('pagination').innerHTML = paginationHTML;
}

// 切换页码
function changePage(page) {
  currentPage = page;
  renderData();
  renderPagination();
}

// 渲染数据
function renderData() {
  const paginatedData = getPaginatedData();
  // 渲染数据到页面...
}

服务器端分页(适用于大数据量) 通过AJAX或Fetch API请求分页数据。

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

// 使用示例
let currentPage = 1;
const pageSize = 10;

async function loadPage(page) {
  currentPage = page;
  const { data, total } = await fetchPaginatedData(currentPage, pageSize);
  renderData(data);
  renderPagination(total);
}

使用现成库实现 可以借助现有库如jQuery插件或现代框架的分页组件。

// 使用DataTables插件示例
$(document).ready(function() {
  $('#example').DataTable({
    "paging": true,
    "pageLength": 10,
    "serverSide": true,
    "ajax": {
      "url": "/api/data",
      "type": "POST"
    }
  });
});

// Vue.js中使用Element UI分页组件
<template>
  <el-pagination
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-size="pageSize"
    :total="total">
  </el-pagination>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 100
    }
  },
  methods: {
    handleCurrentChange(val) {
      this.currentPage = val;
      this.fetchData();
    }
  }
}
</script>

优化建议

  • 添加加载状态指示器
  • 实现页面跳转输入框
  • 考虑URL同步当前页码
  • 实现每页显示数量可配置
  • 添加数据为空时的友好提示

注意事项

js前端实现分页

  • 客户端分页不适合大数据量(超过1000条)
  • 服务器端分页需要后端配合实现
  • 移动端需要考虑触摸操作体验
  • 分页控件应当清晰显示当前状态
  • 考虑添加首页和末页快捷按钮

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

相关文章

vue.js实现轮播

vue.js实现轮播

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

vue搜索过后实现分页

vue搜索过后实现分页

实现 Vue 搜索后分页的方法 数据绑定与搜索逻辑 在 Vue 组件中定义数据属性,包括原始数据列表、搜索关键词、分页相关参数: data() { return { originalLi…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

vue 分页 实现

vue 分页 实现

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…