jQuery实现带有洗牌效果的动画分页实例

首先让我们来理解一下这个问题的背景和要求。

背景:

现代网站中要求使用分页功能来展示大量数据。然而,单调的翻页效果会显得呆板,缺乏吸引力。因此,我们可以考虑使用带有动画效果的分页实例来增强用户体验。

要求:

本题要求我们使用jQuery来实现一个带有洗牌效果的动画分页实例。需要考虑用户界面的美观度和代码优雅性。

接下来我们开始讲解具体的实现方法。我们需要分为以下步骤来完成:

  1. HTML

首先在我们的HTML页面中,需要添加以下HTML代码结构:

<div class="wrapper">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
</div>

<div class="pagination">
  <ul>
  </ul>
</div>

其中,每一个 .item 类表示一个页面项目,.wrapper 类是一个容器,.pagination类表示我们的分页容器。

  1. CSS

接下来我们需要使用CSS来美化页面,并启动动画分页。

.wrapper{
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  max-width: 800px;
  margin: 0 auto;
}

.item{
  width: 150px;
  height: 150px;
  font-size: 50px;
  line-height: 150px;
  border: 1px solid #000;
  margin: 10px;
  text-align: center;
}
.pagination {
  display: flex;
  justify-content: center;
}
.pagination li {
  list-style: none;
  margin: 0 5px;
  cursor: pointer;
  color: #000;
}
.pagination li.active {
  font-weight: bold;
}

其中.wrapper 和 .item 的 CSS 分别用于定义分页容器和分页项目的样式。.pagination 和 .pagination li 用于定义分页器的样式。

  1. JS

最后,我们需要使用 jQuery 来实现动画分页效果。JS 代码如下:

$(document).ready(function(){
  var itemsPerPage = 4;
  var currentPage = 1;
  var totalPages = Math.ceil($('.item').length / itemsPerPage);
  for(var i=1;i<=totalPages;i++){
    $('.pagination ul').append('<li class="page-link">'+ i +'</li>');
  }
  $('.pagination ul li:nth-child('+currentPage+')').addClass('active');
  $('.item').hide();
  $('.item').slice(0, itemsPerPage).show();
  $('.pagination li').click(function(){
    $(this).addClass('active').siblings().removeClass('active');
    var pageNumber = $(this).text();
    var firstItemIndex = (pageNumber - 1) * itemsPerPage;
    var lastItemIndex = firstItemIndex + itemsPerPage;
    $('.item').hide().slice(firstItemIndex, lastItemIndex).show();
    $('.item').hide().slice(firstItemIndex, lastItemIndex).shuffle().show();
  });
});

$.fn.shuffle = function() {
    var allElems = this.get(),
        getRandom = function(max) {
            return Math.floor(Math.random() * max);
        },
        shuffled = $.map(allElems, function(){
            var random = getRandom(allElems.length),
                randEl = $(allElems[random]).clone(true)[0];
            allElems.splice(random, 1);
            return randEl;
       });
    this.each(function(i){
        $(this).replaceWith($(shuffled[i]));
    });
    return $(shuffled);
};

上述代码中,我们首先定义了每一页的 .item 项目数量 itemsPerPage 和当前页码 currentPage,然后利用 Math.ceil() 方法来计算出总页数 totalPages,再根据 totalPages 循环渲染出分页器。同时,我们给当前选中的第一页添加了一个 active 类。

点击分页器的时候,我们使用 .slice() 方法来截取分页器对应的 .item 项目,并使用我们自己写的 .shuffle() 方法来对选择的项目进行洗牌动画效果。通过最后显示页面中的分页项目,并使用 .show() 方法来显示动画效果。

完成以上三个步骤之后,我们的动画分页实例就可以在网页中显示啦。

下面来演示一个完整的实现和效果,实现越详细越好,以下代码摘自我的个人博客。

<!DOCTYPE html>
<html>
  <head>
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .wrapper{
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      max-width: 800px;
      margin: 0 auto;
    }
    .item{
      width: 150px;
      height: 150px;
      font-size: 50px;
      line-height: 150px;
      border: 1px solid #000;
      margin: 10px;
      text-align: center;
    }
    .pagination ul{
      display: flex;
      justify-content: center;
      margin-top: 20px;
    }
    .pagination li {
      list-style: none;
      margin: 0 5px;
      cursor: pointer;
      color: #000;
    }
    .pagination li.active {
      font-weight: bold;
    }
  </style>
  </head>
  <body>
    <h1>jQuery实现带有洗牌效果的动画分页实例</h1>
    <div class="wrapper">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
      <div class="item">4</div>
      <div class="item">5</div>
      <div class="item">6</div>
      <div class="item">7</div>
      <div class="item">8</div>
      <div class="item">9</div>
      <div class="item">10</div>
    </div>

    <div class="pagination">
      <ul>
      </ul>
    </div>

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
    $(document).ready(function(){
      var itemsPerPage = 4;
      var currentPage = 1;
      var totalPages = Math.ceil($('.item').length / itemsPerPage);
      for(var i=1;i<=totalPages;i++){
        $('.pagination ul').append('<li class="page-link">'+ i +'</li>');
      }
      $('.pagination ul li:nth-child('+currentPage+')').addClass('active');
      $('.item').hide();
      $('.item').slice(0, itemsPerPage).show();
      $('.pagination li').click(function(){
        $(this).addClass('active').siblings().removeClass('active');
        var pageNumber = $(this).text();
        var firstItemIndex = (pageNumber - 1) * itemsPerPage;
        var lastItemIndex = firstItemIndex + itemsPerPage;
        $('.item').hide().slice(firstItemIndex, lastItemIndex).shuffle().show();
      });
    });

    $.fn.shuffle = function() {
        var allElems = this.get(),
            getRandom = function(max) {
                return Math.floor(Math.random() * max);
            },
            shuffled = $.map(allElems, function(){
                var random = getRandom(allElems.length),
                    randEl = $(allElems[random]).clone(true)[0];
                allElems.splice(random, 1);
                return randEl;
           });
        this.each(function(i){
            $(this).replaceWith($(shuffled[i]));
        });
        return $(shuffled);
    };
    </script>
  </body>
</html>

代码说明:

CSS部分用于自定义网页样式,主要包括 .wrapper、 .item 和 .pagination,样式用于设置内容模块、单元格以及分页器的样式。

HTML部分包括 .wrapper 和 .pagination,前者包含了1到10这十个数字,后者为空的列表。

JS部分绑定三个变量,分别是每页显示的实例、当前页数和总页数。在HTML被加载后,我们循环渲染出分页器,给第一页添加一个 active 类,隐藏静态实例。点击分页器相应的按钮时,能够通过计算对应分页器在 .wrapper 中的实例位置,显示出当前页,并具有动画效果。

演示:https://wxyblog.xyz/demo/pagination-shuffle.html

另外我也写了一篇关于此部分的详细解析,希望对你有所帮助:https://wxyblog.xyz/p/jquery-paging-shuffle.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery实现带有洗牌效果的动画分页实例 - Python技术站

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

相关文章

  • JavaScript中的”=、==、===”区别讲解

    当我们使用JavaScript进行开发的时候,经常需要判断两个变量是否相等或者给一个变量赋值,这时我们就需要使用到 =、== 以及 === 这些操作符。这里我们就来详细讲解一下它们的区别与应用。 = 赋值操作符 在JavaScript中,单个等号(=)表示将右侧的值赋给左侧的变量。例如下面的代码将数值1赋给变量x: var x; x = 1; == 相等操作…

    JavaScript 2023年5月17日
    00
  • JS正则(RegExp)判断文本框中是否包含特殊符号

    JS正则(RegExp)可以判断文本框中是否包含特殊符号,以下是具体的攻略: 创建正则表达式 在使用JS正则判断之前,需要先创建对应的正则表达式。可以使用RegExp构造函数或者简写方式来创建正则表达式。 例如,以下代码创建了一个匹配特殊字符的正则表达式: var pattern = /[~!@#$%^&*()_+`\-={}[\]\\|;:’&qu…

    JavaScript 2023年6月10日
    00
  • JavaScript接口实现代码 (Interfaces In JavaScript)

    JavaScript在ES6之前并没有真正的接口(Interfaces)的概念,但是我们可以通过一些技巧来实现接口。在这篇文章中,我将为你呈现一个完整的JavaScript接口实现代码攻略: 什么是JavaScript接口? 接口是一个描述类应该如何实现函数的集合。在函数式编程中,接口是一个纯粹的抽象概念,用于描述具有特定行为或功能的组件。 如何实现Java…

    JavaScript 2023年5月18日
    00
  • vue3:vue2中protoType更改为config.globalProperties问题

    在Vue.js 3中,一些API的使用方式发生了更新。其中,一个重要的改变是将Vue 2.x中的全局对象$和prototype更改为了config.globalProperties,以便更好的支持TypeScript类型和减少变量泄漏的问题。 下面是完整攻略: 1. 理解问题 在Vue.js 2.x 版本中,我们可以通过以下方式为Vue实例添加全局属性: V…

    JavaScript 2023年6月11日
    00
  • Js实现Base64编码与解码

    Js实现Base64编码与解码的完整攻略如下: Base64编码与解码 Base64是一种用64种字符来表示二进制数据的编码方式。它常用于在URL、Cookie、网页传输等场合下,将原始数据转换为纯文本的形式来进行传输或存储。在JavaScript中,可以通过自带的atob和btoa函数来实现Base64的编解码。 Base64编码 在JavaScript中…

    JavaScript 2023年5月19日
    00
  • jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】

    首先需要明确的是,WebGL是一种实现3D图形的Web标准技术,而HTML5则是当今Web开发最热门的技术之一。而本攻略则是讲解如何使用jQuery和HTML5来实现高性能的烟花绽放动画效果。 第一步:准备工作 在开始使用jQuery+HTML5实现WebGL高性能烟花绽放动画效果之前,我们需要进行一些准备工作。具体如下: 下载WebGL的JavaScrip…

    JavaScript 2023年6月11日
    00
  • javascript实现原生ajax的几种方法介绍

    针对“javascript实现原生ajax的几种方法介绍”,以下是完整的攻略,共分为四个部分:介绍、XMLHttpRequest方法、fetch方法和示例说明。 介绍 AJAX是异步JavaScript和XML(Asynchronous JavaScript and XML)的缩写,是一种在无需重新加载整个页面的情况下向服务器发送请求的技术。原生AJAX(也…

    JavaScript 2023年6月11日
    00
  • javascript函数的4种调用方式与this的指向

    如下是关于“javascript函数的4种调用方式与this的指向”的完整攻略: 1. 函数调用 在javascript中,最基本的函数调用方式就是函数调用。当一个函数作为普通函数调用时,函数内的this指向全局对象window。例如: function sayHello() { console.log("Hello " + this.n…

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