Vue实现简单分页器


Posted in Javascript onDecember 29, 2018

提前说明:这原本是一个Jquery分页器,因为公司项目前后端不分离,以前的分页用的是基于.net的分页器。后来我引入了jquery分页器,在我掌握Vue之后,又自己写了一些基于Vue的插件(为什么不用成熟的Vue插件库,还是因为前后端没分离)但是前后端相对最开始的混杂已经算是分得很开了。

分页器的样式是bootstrap风格的,是一个完全自定义样式的分页器,这意味着你可以很轻松把它改成你想要的样子(例子效果图如下)。

Vue实现简单分页器

所有的分页器DEMO,都不会太简单,所以想要真正的掌握(支配)一款好用的分页插件,请务必耐心看下面的使用示例代码(本demo的下载地址,点击可以作为项目直接打开使用),另外也写了详细的注释并尽可能的保证简单好用。
引用bootstrap(如果你希望是bootstrap风格)
或者你完全可以自己写自己想要的风格!因为分页器的html结构是js生成的。
需要引用的脚本文件有(资源均在文章底部下载包里)。

按如下顺序引入:

1.jQuery
2.Vue
3.jgPaginator.js

贴代码,看注释:

<!DOCTYPE html>
<html>

 <head>
  <meta charset="UTF-8">
  <title>分页组件</title>
  <link rel="stylesheet" href="../../css/bootstrap.min.css" >

  <style>
   html,
   body {
    width: 100%;
    height: 100%;
   }

   .page-container {
    width: 1200px;
    border: 1px solid #000;
    margin: 50px auto 0 auto;
    overflow: hidden;
   }

   .page-content{
    margin: 50px 0;
   }

   /*jqPaginator分页控件样式*/ 
   .hiddenPager {
    visibility: hidden;
   }

   .jqPager {
    position: relative;
    width: 100%;
    height: 40px;
    padding: 25px 0;
    background-color: #FFF;
   }

   .jqPager .pagination {
    float: initial;
    display: inline-block;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    margin: 0 auto;
    text-align: center;
   }

   .jqPager .pagination li {
    display: inline-block;
   }

   .jqPager .pagination li a {
    padding: 4px 10px;
   }

   /*跳页--选用功能*/
   .jumpBox {
    position: absolute;
    top: 0;
    right: 105px;
   }

   .jumppage {
    display: block;
    width: 42px;
    padding-left: 8px;
    float: left;
    height: 34px;
    outline: none;
   }

   .jumpbtn {
    float: left;
    display: block;
    height: 34px;
    line-height: 34px;
    margin-left: 5px;
   }
  </style>

 </head>

 <body>

  <div id="app" class="page-container">
   <!--页面该显示的内容-->
   <div class="page-content text-center">{{nova.text}}</div>

   <!--分页-->
   <div class="jqPager" v-bind:class="{hiddenPager:hiddenPager}">
    <ul id="jqPager" class="pagination cf"></ul>
    <!--没有跳页功能可以不要下面的jumpBox-->
    <div class="jumpBox">
     <input type="number" class="jumppage" id="jumpPageIndex" />
     <a href="javascript:;" rel="external nofollow" class="jumpbtn" v-on:click="pageSkip()">跳转</a>
    </div>
   </div>

  </div>

 </body>
 <script src="jquery-2.1.4.min.js"></script>
 <script src="vue.js"></script>
 <script src="jqPaginator.js"></script>
 <script>
  //虚拟的数据来源
  var dataSource = [{
    "text": "第一页数据,应该是一个数组,包含了pageSize条数据"
   }, {
    "text": "第二页数据"
   }, {
    "text": "第三页数据"
   },
   {
    "text": "第四页数据"
   },
   {
    "text": "第五页数据"
   },
   {
    "text": "第六页数据"
   }
  ]

  //模拟后台返回的数据
  var backData = {
   Data: dataSource,//返回的数据
   totlaCount: 6,//搜索结果总数
   Success: true//请求接口是否成功
  };

  /*每一页显示的数据条数,按照约定传给后台,此例为1。
  需要加以说明的是这个实例你是看不出来这个参数的作用的,正如我返回数据中说的那样,后台给你返回的数据条数
  应该是一个有 -pagesize-条数据的数组才对*/
  var jqPageSize = 1; 

  var app = new Vue({
   el: "#app",
   data: {
    //query是查询条件,这里就是当前页码和每一页该显示的数据条数
    query: {
     pageIndex: 1,
     pageSize: jqPageSize
    },
    nova: [],
    hiddenPager: true,//是否显示分页
    totalCount: 0,//数据总条数,后台返回
   },
   methods: {
    //初始化分页,通过更改生成的html结构(给其添加class或者改变返回的DOM)可以手动配置页器的显示效果。
    initPager: function() {
     $('#jqPager').jqPaginator({
      visiblePages: 1,
      currentPage: 1,
      totalPages: 1,
      first: '<li id="first"><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首页</a></li>',
      prev: '<li id="prev"><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >上一页 </a></li>',
      next: '<li id="next"><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >下一页</a></li>',
      last: '<li id="last"><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >尾页</a></li>',
      page: '<li class="page"><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >{{page}}</a></li>',
     });
    },

    //获取数据并根据结果配置分页
    getData: function() {
     this.nova = backData.Data[this.query.pageIndex - 1];     
     this.totalCount = backData.Data.length;
     this.hiddenPager = false;

     //核心配置在此部,根据后台返回数据控制分页器该如何显示
     //想要完全掌握这个分页器,你可以研究下jgPaginator.js源码,很容易修改。
     $('#jqPager').jqPaginator('option', {
      totalCounts: app.totalCount,//后台返回数据总数
      pageSize: jqPageSize, //每一页显示多少条内容
      currentPage: app.query.pageIndex, //现在的页码
      visiblePages: 4, //最多显示几页

      //翻页时触发的事件
      onPageChange: function(num) {
       //app.query.pageIndex = num;
       app.pageChangeEvent(num);//调用翻页事件
      }
     });
    },
    //翻页或者跳页事件
    pageChangeEvent: function(pageIndex) {
     this.query.pageIndex = Number(pageIndex);
     this.getData();
    },

    //跳页-选用功能,可有可无
    pageSkip: function() {  
     var maxPage = 1;//默认可以跳的最大页码     
     var targetPage = document.getElementById("jumpPageIndex").value;//目的页面     
     if(!targetPage) {
      alert("请输入页码");
      return;
     }

     //计算最大可跳页数
     maxPage = Math.floor(this.totalCount / this.query.pageSize);     
     if(maxPage<1){
      maxPage=1;
     }

     if(targetPage > maxPage) {
      alert('超过最大页数了,当前最大页数是' + maxPage);
      return;
     }
     this.pageChangeEvent(targetPage);
    },   
   },
   //这一部分的定时器是为了此例方便加上的,初始化分页方法(initPager)要在获取数据之前执行就可以了
   mounted: function() {
    this.initPager();

    setTimeout(function() {
     app.getData();
    }, 50)
   }

  });
 </script>

</html>

以上就是分页的全部实现代码,想要完全掌握,只看DEMO肯定是不够的,所以这里是DEMO的下载地址,里面包含了所有需要引用的资源文件以及未压缩的分页器核心:jqPaginator.js。你需要好好看看它的源码!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery统计复选框选中示例
Nov 05 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 Javascript
js常用系统函数用法实例分析
Jan 12 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
javascript中SetInterval与setTimeout的定时器用法
Aug 24 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
js实现左右两侧浮动广告
Jul 09 Javascript
用npm-run实现自动化任务的方法示例
Jan 14 Javascript
图解javascript作用域链
May 27 Javascript
vue cli安装使用less的教程详解
Jul 12 Javascript
Vue循环中多个input绑定指定v-model实例
Aug 31 Javascript
详解前端任务构建利器Gulp.js使用指南
Apr 30 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 #Javascript
基于vue.js实现分页查询功能
Dec 29 #Javascript
小程序日历控件使用方法详解
Dec 29 #Javascript
jQuery实现的老虎机跑动效果示例
Dec 29 #jQuery
小程序自定义日历效果
Dec 29 #Javascript
微信小程序自定义带价格显示日历效果
Dec 29 #Javascript
微信小程序日历效果
Dec 29 #Javascript
You might like
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
动态加载JS文件的三种方法
2013/11/08 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
django1.8使用表单上传文件的实现方法
2016/11/04 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
亲戚结婚的请假条
2014/02/11 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
基于docker安装zabbix的详细教程
2022/06/05 Servers