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中,闭包是一种特殊的函数。它可以访问它外部作用域中的变量和函数,即使外部函数已经执行完毕,内部函数仍然可以访问外部函数中的变量和函数。这是因为JavaScript采用了词法作用域,并通过作用域链来保存变量和函数。 闭包的应用 保存变量 由于闭包可以访问外部作用域中的变量,因此可…

    JavaScript 2023年6月10日
    00
  • js对数字的格式化使用说明

    下面是关于js对数字的格式化使用说明的完整攻略。 什么是数字格式化 数字格式化是在将数字数据呈现给用户时,在数字上应用特定格式,以便于理解和解释。 js对数字的格式化有哪些方法 在JavaScript中,我们可以使用toExponential()、toFixed()、toPrecision()和toLocaleString()四种不同的方法来格式化数字。 t…

    JavaScript 2023年5月28日
    00
  • 谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)

    JSON是一种轻量级的数据交换格式,提供了在不同编程语言之间交换数据的标准格式。在JavaScript中,JSON对象提供了一种方便的方式将JavaScript对象转换成JSON格式的字符串或者将JSON格式的字符串转换成JavaScript对象。而JSON.stringify()和JSON.parse()就是这两种转换方式。 JSON.stringify(…

    JavaScript 2023年5月27日
    00
  • 简单聊聊JavaScript中的事件循环

    我们来谈谈JavaScript中的事件循环(Event Loop)。 什么是事件循环? 事件循环是JavaScript的一个重要的运行机制,它使得浏览器的JavaScript引擎具备操作系统调度器的功能。它不断地从任务队列中取出任务执行,直到任务队列为空。 JavaScript的事件循环是一个持续进行的过程,所以它被称为循环。而任务的来源有两种,一种是来自于…

    JavaScript 2023年5月27日
    00
  • js获取网页高度(详细整理)

    让我来详细讲解一下”js获取网页高度(详细整理)”的攻略。 什么是网页高度? 网页高度指的是整个网站页面的高度,包括html、body、以及网页中的所有内容和元素。在一些网站应用中,需要获取网页高度,以便于调整页面布局等操作。下面来介绍一些常用的获取网页高度的方法。 方法一:使用document.body.scrollHeight 使用javascript中…

    JavaScript 2023年6月11日
    00
  • vue3中关于路由hash与History的设置

    下面是关于Vue3中路由hash与History的设置的详细攻略: 1. 路由设置 在Vue3中使用路由需要先安装vue-router,使用以下命令进行安装: npm install vue-router@4 1.1 history模式 如果使用history模式,则路由使用的是浏览器的history.pushState和history.replaceSta…

    JavaScript 2023年6月11日
    00
  • JavaScript预编译和执行过程详解

    JavaScript预编译和执行过程详解 在JavaScript中,代码的执行过程涉及到了预编译和执行两个重要步骤。本篇攻略将会详细讲解这两步骤的具体内容,以及他们的执行顺序和影响。 预编译 在JavaScript中,当一段代码被执行之前,它会先进行预编译,即将所有变量的声明提前到当前作用域的顶部,也称为变量提升。这个过程是在代码执行之前自动完成的。 变量提…

    JavaScript 2023年5月27日
    00
  • html5+canvas实现支持触屏的签名插件教程

    下面我将详细讲解“html5+canvas实现支持触屏的签名插件教程”的完整攻略,过程中包含以下几个步骤: HTML5+Canvas基础知识 实现鼠标支持的签名插件 实现触屏支持的签名插件 HTML5+Canvas基础知识 在使用HTML5+Canvas实现签名插件之前,你需要了解一些HTML5+Canvas的基础知识: 常用方法 var canvas = …

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