当前位置:首页 > JavaScript

js分页实现

2026-01-15 15:14:23JavaScript

分页的基本原理

分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(total)。

前端分页实现(本地数据)

适用于数据已全部加载到前端的情况:

js分页实现

function paginate(data, currentPage = 1, pageSize = 10) {
  const startIndex = (currentPage - 1) * pageSize;
  return data.slice(startIndex, startIndex + pageSize);
}

// 示例用法
const allData = [...]; // 原始数据数组
const pageData = paginate(allData, 2, 5); // 获取第2页,每页5条

后端分页实现(API请求)

需要与后端配合,通过参数传递分页信息:

js分页实现

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

// 示例用法
const { data, total } = await fetchPaginatedData(1, 10);

分页控件实现

常见的分页UI组件实现逻辑:

function renderPagination(total, currentPage, pageSize, container) {
  const totalPages = Math.ceil(total / pageSize);
  let html = '';

  if (currentPage > 1) {
    html += `<button class="prev">上一页</button>`;
  }

  for (let i = 1; i <= totalPages; i++) {
    html += `<button class="page ${i === currentPage ? 'active' : ''}">${i}</button>`;
  }

  if (currentPage < totalPages) {
    html += `<button class="next">下一页</button>`;
  }

  container.innerHTML = html;

  // 事件监听
  container.addEventListener('click', (e) => {
    if (e.target.classList.contains('prev')) {
      // 上一页逻辑
    } else if (e.target.classList.contains('next')) {
      // 下一页逻辑
    } else if (e.target.classList.contains('page')) {
      // 跳转页码逻辑
    }
  });
}

性能优化建议

对于大数据量的分页,考虑以下优化方案:

  • 虚拟滚动:只渲染可视区域内的数据
  • 数据预加载:提前加载相邻页面的数据
  • 分页缓存:对已请求过的页面数据进行缓存

完整示例代码

class Pagination {
  constructor({ total, pageSize, onChange }) {
    this.total = total;
    this.pageSize = pageSize;
    this.currentPage = 1;
    this.onChange = onChange;
  }

  get totalPages() {
    return Math.ceil(this.total / this.pageSize);
  }

  next() {
    if (this.currentPage < this.totalPages) {
      this.goTo(this.currentPage + 1);
    }
  }

  prev() {
    if (this.currentPage > 1) {
      this.goTo(this.currentPage - 1);
    }
  }

  goTo(page) {
    this.currentPage = Math.max(1, Math.min(page, this.totalPages));
    this.onChange(this.currentPage);
  }

  render(container) {
    // 实现类似前面的renderPagination方法
  }
}

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

相关文章

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

vue 实现分页

vue 实现分页

分页实现方法 在Vue中实现分页功能,可以通过计算属性和方法结合来实现。以下是一个典型的分页实现方式: 模板部分 <template> <div> <ul…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…