当前位置:首页 > JavaScript

js实现分页

2026-01-08 12:21:13JavaScript

实现分页的基本思路

分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。

前端分页实现(静态数据)

假设已有全部数据,仅需前端分页展示:

js实现分页

// 示例数据
const allData = Array.from({length: 100}, (_, i) => ({id: i, content: `Item ${i}`}));

function paginate(data, currentPage = 1, perPage = 10) {
  const totalPages = Math.ceil(data.length / perPage);
  const startIdx = (currentPage - 1) * perPage;
  const paginatedData = data.slice(startIdx, startIdx + perPage);

  return {
    currentPage,
    perPage,
    totalPages,
    data: paginatedData
  };
}

// 使用示例
const result = paginate(allData, 2);
console.log(result.data); // 显示第2页的10条数据

动态分页控件实现

创建可交互的分页UI组件:

class Pagination {
  constructor({ totalItems, perPage = 10, currentPage = 1 }) {
    this.totalItems = totalItems;
    this.perPage = perPage;
    this.currentPage = currentPage;
    this.totalPages = Math.ceil(totalItems / perPage);
  }

  render(container) {
    container.innerHTML = '';

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

    // 页码按钮
    for (let i = 1; i <= this.totalPages; i++) {
      const pageBtn = document.createElement('button');
      pageBtn.textContent = i;
      if (i === this.currentPage) {
        pageBtn.classList.add('active');
      }
      pageBtn.addEventListener('click', () => this.goToPage(i));
      container.appendChild(pageBtn);
    }

    // 下一页按钮
    if (this.currentPage < this.totalPages) {
      const nextBtn = document.createElement('button');
      nextBtn.textContent = 'Next';
      nextBtn.addEventListener('click', () => this.goToPage(this.currentPage + 1));
      container.appendChild(nextBtn);
    }
  }

  goToPage(page) {
    this.currentPage = Math.max(1, Math.min(page, this.totalPages));
    this.onPageChange(this.currentPage);
    this.render(document.getElementById('pagination-container'));
  }

  onPageChange() {} // 由使用者重写
}

// 使用示例
const pagination = new Pagination({ totalItems: 100 });
pagination.onPageChange = (page) => {
  console.log(`当前页码: ${page}`);
  // 这里可以发起API请求或更新DOM
};
pagination.render(document.getElementById('pagination-container'));

结合API的分页实现

实际项目中常需要从后端API获取分页数据:

js实现分页

async function fetchPaginatedData(page = 1, perPage = 10) {
  try {
    const response = await fetch(`/api/data?page=${page}&limit=${perPage}`);
    const { data, total } = await response.json();

    return {
      data,
      currentPage: page,
      totalPages: Math.ceil(total / perPage)
    };
  } catch (error) {
    console.error('获取数据失败:', error);
    return { data: [], currentPage: 1, totalPages: 1 };
  }
}

// 使用示例
fetchPaginatedData(2).then(({ data }) => {
  console.log('第2页数据:', data);
});

分页样式优化建议

添加基础CSS样式提升用户体验:

.pagination-container button {
  margin: 0 5px;
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
  cursor: pointer;
}

.pagination-container button.active {
  background: #007bff;
  color: white;
  border-color: #007bff;
}

.pagination-container button:hover:not(.active) {
  background: #f0f0f0;
}

性能优化技巧

对于大数据量场景:

  • 使用虚拟滚动代替传统分页
  • 实现无限滚动加载
  • 添加缓存机制避免重复请求
  • 考虑预加载相邻页面的数据

以上实现方案可根据具体需求组合使用,静态数据分页适合小型应用,API分页适合数据量大的场景,动态分页控件可复用性最高。

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

相关文章

vue实现后台分页

vue实现后台分页

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

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js 实现继承

js 实现继承

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

js实现乘

js实现乘

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

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isset…

vue router实现分页

vue router实现分页

使用 Vue Router 实现分页 在 Vue.js 项目中,可以通过 Vue Router 结合分页组件实现分页功能。以下是实现分页的几种方法: 使用路由参数传递页码 在路由配置中定义一个动态参…