当前位置:首页 > JavaScript

js分页实现

2026-01-15 15:14:23JavaScript

分页的基本原理

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

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

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

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请求)

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

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
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…