原生JS分页展示效果(点击分页看效果)

yizhihongxing

下面是“原生JS分页展示效果”的完整攻略。

前言

在实际项目开发中,通常都需要使用分页功能。常用的分页库有jQuery的pagination.js,但如果不想依赖jQuery,则可以使用原生JS实现分页。本篇文章将介绍如何使用原生JS实现分页展示效果。

实现步骤

第一步:创建分页HTML结构

首先,需要创建一个包含分页按钮的HTML结构。例如:

<div class="pagination">
  <a href="#">上一页</a>
  <a href="#">1</a>
  <a href="#">2</a>
  <a href="#">3</a>
  <a href="#">下一页</a>
</div>

其中,“上一页”和“下一页”按钮的class可以分别设置为prevnext,方便后面的JS实现。

第二步:获取分页数据

获取分页数据的方式有很多种,这里以AJAX获取JSON数据为例。假设我们已经成功获取到了一个包含20条数据的JSON数组。

第三步:按照每页的数据条数,划分总页数

假设每页显示5条数据,则总页数为4(20条数据 ÷ 5条每页)。在JS中,可以使用Math.ceil()函数对总页数进行向上取整。

var itemsPerPage = 5;
var totalPage = Math.ceil(data.length / itemsPerPage);

第四步:根据当前页数,渲染对应的数据

假设当前页码为1,则需要渲染第1页的数据,即数组下标0~4的数据。

var currentPage = 1;
var start = (currentPage - 1) * itemsPerPage;
var end = start + itemsPerPage;
var currentData = data.slice(start, end);

第五步:动态渲染分页按钮

根据总页数,动态生成分页按钮。这里可以使用for循环遍历生成。

var pagination = document.querySelector('.pagination');
pagination.innerHTML = '';

var prevLink = "<a href='#' class='prev'>上一页</a>";
var nextLink = "<a href='#' class='next'>下一页</a>";

pagination.innerHTML += prevLink;

for (var i = 1; i <= totalPage; i++) {
  var button = "<a href='#'>" + i + "</a>";
  pagination.innerHTML += button;
}

pagination.innerHTML += nextLink;

第六步:绑定点击事件,实现分页功能

给分页按钮绑定点击事件,并在点击事件中,根据当前点击的按钮,计算出当前页码,然后重新渲染对应页码的数据。

pagination.addEventListener('click', function(e) {
  e.preventDefault();
  var link = e.target;

  if (link.classList.contains('prev') && currentPage > 1) {
    currentPage--;
  } else if (link.classList.contains('next') && currentPage < totalPage) {
    currentPage++;
  } else if (link.tagName === 'A') {
    currentPage = parseInt(link.innerText);
  } else {
    return;
  }

  start = (currentPage - 1) * itemsPerPage;
  end = start + itemsPerPage;
  currentData = data.slice(start, end);

  renderData();
  renderPagination();
});

第七步:渲染数据和分页按钮

根据当前页码和每页数据条数渲染对应页码的数据和分页按钮。这里可以封装两个函数,分别进行数据和分页的渲染。

function renderData() {
  // 渲染数据的代码
}

function renderPagination() {
  // 渲染分页按钮的代码
}

示例说明1

下面是一个简单的示例。假设有一个包含20条数据的JSON数组,每页显示5条数据,现在需要使用原生JS实现分页展示效果。

<div class="pagination">
  <a href="#" class="prev">上一页</a>
  <a href="#">1</a>
  <a href="#">2</a>
  <a href="#">3</a>
  <a href="#">4</a>
  <a href="#" class="next">下一页</a>
</div>

<ul class="data"></ul>
var itemsPerPage = 5;
var data = [
  {name: '张三', age: 18},
  {name: '李四', age: 20},
  {name: '王五', age: 22},
  {name: '赵六', age: 24},
  {name: '钱七', age: 26},
  {name: '孙八', age: 28},
  {name: '周九', age: 30},
  {name: '吴十', age: 32},
  {name: '郑十一', age: 34},
  {name: '韩十二', age: 36},
  {name: '刘十三', age: 38},
  {name: '朱十四', age: 40},
  {name: '陈十五', age: 42},
  {name: '杨十六', age: 44},
  {name: '胡十七', age: 46},
  {name: '林十八', age: 48},
  {name: '郭十九', age: 50},
  {name: '何二十', age: 52},
  {name: '吕二十一', age: 54}
];

var totalPage = Math.ceil(data.length / itemsPerPage);
var currentPage = 1;
var start = (currentPage - 1) * itemsPerPage;
var end = start + itemsPerPage;
var currentData = data.slice(start, end);

renderData();
renderPagination();

function renderData() {
  var list = document.querySelector('.data');
  list.innerHTML = '';

  currentData.forEach(function(item) {
    var li = document.createElement('li');
    li.innerText = item.name + ',' + item.age + '岁';
    list.appendChild(li);
  });
}

function renderPagination() {
  var pagination = document.querySelector('.pagination');
  pagination.innerHTML = '';

  var prevLink = "<a href='#' class='prev'>上一页</a>";
  var nextLink = "<a href='#' class='next'>下一页</a>";

  pagination.innerHTML += prevLink;

  for (var i = 1; i <= totalPage; i++) {
    var button = "<a href='#'>" + i + "</a>";
    pagination.innerHTML += button;
  }

  pagination.innerHTML += nextLink;
}

var pagination = document.querySelector('.pagination');
pagination.addEventListener('click', function(e) {
  e.preventDefault();
  var link = e.target;

  if (link.classList.contains('prev') && currentPage > 1) {
    currentPage--;
  } else if (link.classList.contains('next') && currentPage < totalPage) {
    currentPage++;
  } else if (link.tagName === 'A') {
    currentPage = parseInt(link.innerText);
  } else {
    return;
  }

  start = (currentPage - 1) * itemsPerPage;
  end = start + itemsPerPage;
  currentData = data.slice(start, end);

  renderData();
  renderPagination();
});

示例说明2

下面是一个稍微复杂一点的示例。假设需要获取一个包含1000条数据的JSON数组,每页显示10条数据,同时需要实现页面加载时自动显示第一页数据。

<div class="pagination">
  <a href="#" class="prev">上一页</a>
  <a href="#">1</a>
  <a href="#">2</a>
  <a href="#">3</a>
  <a href="#">4</a>
  <a href="#">5</a>
  <a href="#" class="next">下一页</a>
</div>

<ul class="data"></ul>
var itemsPerPage = 10;
var data;

// AJAX获取JSON数据
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    data = JSON.parse(xhr.responseText);
    init();
  }
};
xhr.open('GET', 'data.json');
xhr.send();

function init() {
  var totalPage = Math.ceil(data.length / itemsPerPage);
  var currentPage = 1;
  var start = (currentPage - 1) * itemsPerPage;
  var end = start + itemsPerPage;
  var currentData = data.slice(start, end);

  renderData();
  renderPagination();

  function renderData() {
    var list = document.querySelector('.data');
    list.innerHTML = '';

    currentData.forEach(function(item) {
      var li = document.createElement('li');
      li.innerText = item.name + ',' + item.age + '岁';
      list.appendChild(li);
    });
  }

  function renderPagination() {
    var pagination = document.querySelector('.pagination');
    pagination.innerHTML = '';

    var prevLink = "<a href='#' class='prev'>上一页</a>";
    var nextLink = "<a href='#' class='next'>下一页</a>";

    pagination.innerHTML += prevLink;

    for (var i = 1; i <= totalPage; i++) {
      var button = "<a href='#'>" + i + "</a>";
      pagination.innerHTML += button;
    }

    pagination.innerHTML += nextLink;
  }

  var pagination = document.querySelector('.pagination');
  pagination.addEventListener('click', function(e) {
    e.preventDefault();
    var link = e.target;

    if (link.classList.contains('prev') && currentPage > 1) {
      currentPage--;
    } else if (link.classList.contains('next') && currentPage < totalPage) {
      currentPage++;
    } else if (link.tagName === 'A') {
      currentPage = parseInt(link.innerText);
    } else {
      return;
    }

    start = (currentPage - 1) * itemsPerPage;
    end = start + itemsPerPage;
    currentData = data.slice(start, end);

    renderData();
    renderPagination();
  });
}

总结

本篇文章介绍了如何使用原生JS实现分页展示效果。通过分步实现,我们可以清晰地了解到整个实现的过程。当然,上面的代码还可以进行优化和模块化,以提高代码的可复用性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS分页展示效果(点击分页看效果) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript客户端遍历控件与获取父容器对象示例代码

    题目涉及到两个主题:JavaScript客户端遍历控件和获取父容器对象。下面,我将从以下几个方面为大家提供一份完整的攻略: JavaScript客户端遍历控件概述; 遍历控件示例说明; 获取父容器对象概述; 获取父容器对象示例说明。 1. JavaScript客户端遍历控件概述 在JavaScript中,我们经常需要访问页面中的控件对象。这些控件对象通常是通…

    JavaScript 2023年6月10日
    00
  • 关于异步请求ajax原理以及原生Ajax、$.ajax的基本使用详解

    一、异步请求Ajax原理 异步请求Ajax原理是指利用JavaScript和XMLHttpRequest对象实现浏览器与服务器之间的异步通讯。使用Ajax技术不需要刷新整个页面,只需要更新部分页面内容,加快了网页响应速度,提高了用户体验。 实现Ajax的原理是通过XMLHttpRequest对象向服务器发送请求,接收到服务器反馈的数据后更新页面。需要注意的是…

    JavaScript 2023年6月11日
    00
  • JavaScript日期时间与时间戳的转换函数分享

    JavaScript日期时间与时间戳的转换函数分享 介绍 在JavaScript编程中,我们经常需要进行日期与时间戳之间的转换。日期(Date)是指年、月、日、时、分、秒等信息的组合,而时间戳(TimeStamp)则是指从某个固定时间点(如1970年1月1日00:00:00 UTC)开始计算的秒数或毫秒数。在JavaScript中,我们可以通过内置的Date…

    JavaScript 2023年5月27日
    00
  • 程序开发中的几个请不要相信

    下面我将详细讲解“程序开发中的几个请不要相信”。 什么是“程序开发中的几个请不要相信”? 在程序开发领域,有一些观念被广泛传播和认可,但实际上它们并不一定正确。这些观念可能会导致代码质量下降、项目延期、甚至是项目失败。因此,在程序开发中我们需要警惕这些“请不要相信”的说法。 几个不可信的观念 以下是几个在程序开发中常见但不可信的观念: 1. “这个代码之前能…

    JavaScript 2023年6月11日
    00
  • loading动画特效小结

    这里是“loading动画特效小结”的完整攻略: loading动画特效小结 1. 为什么需要loading动画 在网页加载的过程中,用户等待时间过长往往会让用户们感到烦躁,而且这个等待时间也是会让用户选择放弃等待,选择离开的!而为了避免这个情况产生,我们需要添加页面加载动画,以方便用户等待。 2. 实现loading动画的方法 实现loading动画有多种…

    JavaScript 2023年6月10日
    00
  • 80道前端面试经典选择题汇总

    80道前端面试经典选择题汇总 简介 这是一篇涵盖80道前端面试经典选择题的文章,如果你即将进行前端面试或者正在为面试做准备,本篇文章会对你有所帮助。 攻略 1. 提前了解面试形式 在面试开始前,需要了解面试的形式(例如电话面试或者现场面试)、面试官的数量,以及面试的内容等。这有助于你的面试准备。 2. 学习和掌握基础知识 在准备面试时,重点学习和掌握基础知识…

    JavaScript 2023年6月1日
    00
  • Javascript前端下载后台传来的文件流代码实例

    Javascript前端下载后台传来的文件流是一个常见的 Web 开发需求,下面我将详细讲解实现它的完整攻略。 第一步:后台传递文件流 在后台开发过程中,返回文件流需要设置正确的 Content-Type 和 Content-Disposition 头部信息。下面是示例代码: from flask import send_file, make_respons…

    JavaScript 2023年5月27日
    00
  • javascript正则表达式简介

    JavaScript正则表达式简介 JavaScript中的正则表达式是指一种用于匹配和操作字符串的表达式。它们被广泛用于文本搜索和替换操作中。在JavaScript中,使用RegExp对象来表示正则表达式。 正则表达式语法 正则表达式由字符和特殊字符组成,在此先介绍一些基本的概念: 字符表达式:由字母、数字、特殊字符等组成的一个或多个字符。 特殊字符:表达…

    JavaScript 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部