原生js+ajax分页组件

本文实例为大家分享了js+ajax分页组件的具体代码,供大家参考,具体内容如下

1.定义分页组件DOM

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

2.定义分页组件类及实例方法:

// 分页组件类
function Pagination(_ref) {
 this.id = _ref.id;  //分页组件挂载的DOM节点
 this.curPage = _ref.curPage || 1; //初始页码
 this.draw = _ref.draw;  // 初始化分页请求次数
 this.pageSize = _ref.pageSize || 5; //分页个数
 this.pageLength = _ref.pageLength; //每页多少条
 this.pageTotal = 0; //总共多少页
 this.dataTotal = 0; //总共多少数据
 this.ajaxParam = _ref.ajaxParam; // 分页ajax
 this.showPageTotalFlag = _ref.showPageTotalFlag || false; //是否显示数据统计
 this.showSkipInputFlag = _ref.showSkipInputFlag || false; //是否支持跳转
 this.ul = document.createElement('ul');

 this.init();
};

// 给实例对象添加公共属性和方法
Pagination.prototype = {
 init: function() {
  var pagination = document.getElementById(this.id);
  pagination.innerHTML = '';
  this.ul.innerHTML = '';
  pagination.appendChild(this.ul);
  var _this = this;
  _this.getPage(_this.curPage)
  .then( function( data ){
   //首页
   _this.firstPage();
   //上一页
   _this.lastPage();
   //分页
   _this.getPages().forEach(function (item) {
    var li = document.createElement('li');
    if (item == _this.curPage) {
     li.className = 'active';
    } else {
     li.onclick = function () {
      _this.curPage = parseInt(this.innerHTML);
      _this.init();
     };
    }
    li.innerHTML = item;
    _this.ul.appendChild(li);
   });
   //下一页
   _this.nextPage();
   //尾页
   _this.finalPage();

   //是否支持跳转
   if (_this.showSkipInputFlag) {
    _this.showSkipInput();
   }
   //是否显示总页数,每页个数,数据
   if (_this.showPageTotalFlag) {
    _this.showPageTotal();
   }
  } )

 },
 // 分页数据请求
 getPage: function( curPage ){
  var _this = this;
  _this.draw++;
  return new Promise( function( resolve, reh ){
   $.ajax( {
    url: _this.ajaxParam.url,
    type: _this.ajaxParam.type,
    dataType: "json",
    data: {
     curPage: curPage,
     pageLength: 10,
     draw: _this.draw
    },
    success: function(data) {
     if( data.isSuccess === true ){
      var data = data;
      _this.pageTotal = Math.ceil( parseFloat( data.data.totalResult/_this.pageLength ) ),
      _this.dataTotal = data.data.totalResult,
      _this.draw = data.data.draw;
      resolve( data )
     }else {
      reject( "请求错误" )
     }
    },
    error: function(err) {
     reject( err )
    }
   } )
  })
 },
 //首页
 firstPage: function() {
  var _this = this;
  var li = document.createElement('li');
  li.innerHTML = '首页';
  this.ul.appendChild(li);
  li.onclick = function () {
   var val = parseInt(1);
   _this.curPage = val;
   _this.init();
  };
 },
 //上一页
 lastPage: function() {
  var _this = this;
  var li = document.createElement('li');
  li.innerHTML = '<';
  if (parseInt(_this.curPage) > 1) {
   li.onclick = function () {
    _this.curPage = parseInt(_this.curPage) - 1;
    _this.init();
   };
  } else {
   li.className = 'disabled';
  }
  this.ul.appendChild(li);
 },
 //分页
 getPages: function() {
  var pag = [];
  if (this.curPage <= this.pageTotal) {
   if (this.curPage < this.pageSize) {
    //当前页数小于显示条数
    var i = Math.min(this.pageSize, this.pageTotal);
    while (i) {
     pag.unshift(i--);
    }
   } else {
    //当前页数大于显示条数
    var middle = this.curPage - Math.floor(this.pageSize / 2),
     //从哪里开始
     i = this.pageSize;
    if (middle > this.pageTotal - this.pageSize) {
     middle = this.pageTotal - this.pageSize + 1;
    }
    while (i--) {
     pag.push(middle++);
    }
   }
  } else {
   console.error('当前页数不能大于总页数');
  }
  if (!this.pageSize) {
   console.error('显示页数不能为空或者0');
  }
  return pag;
 },
 //下一页
 nextPage: function() {
  var _this = this;
  var li = document.createElement('li');
  li.innerHTML = '>';
  if (parseInt(_this.curPage) < parseInt(_this.pageTotal)) {
   li.onclick = function () {
    _this.curPage = parseInt(_this.curPage) + 1;
    _this.init();
   };
  } else {
   li.className = 'disabled';
  }
  this.ul.appendChild(li);
 },
 //尾页
 finalPage: function() {
  var _this = this;
  var li = document.createElement('li');
  li.innerHTML = '尾页';
  this.ul.appendChild(li);
  li.onclick = function () {
   var yyfinalPage = _this.pageTotal;
   var val = parseInt(yyfinalPage);
   _this.curPage = val;
   _this.init();
  };
 },
 //是否支持跳转
 showSkipInput: function() {
  var _this = this;
  var li = document.createElement('li');
  li.className = 'totalPage';
  var span1 = document.createElement('span');
  span1.innerHTML = '跳转到';
  li.appendChild(span1);
  var input = document.createElement('input');
  input.setAttribute("type","number");
  input.onkeydown = function (e) {
   var oEvent = e || event;
   if (oEvent.keyCode == '13') {
    var val = parseInt(oEvent.target.value);
    if (typeof val === 'number' && val <= _this.pageTotal && val>0) {
     _this.curPage = val;
    }else{
     alert("请输入正确的页数 !")
    }
    _this.init();
   }
  };
  li.appendChild(input);
  var span2 = document.createElement('span');
  span2.innerHTML = '页';
  li.appendChild(span2);
  this.ul.appendChild(li);
 },
 //是否显示总页数,每页个数,数据
 showPageTotal: function() {
  var _this = this;
  var li = document.createElement('li');
  li.innerHTML = '共&nbsp' + _this.pageTotal + '&nbsp页';
  li.className = 'totalPage';
  this.ul.appendChild(li);
  var li2 = document.createElement('li');
  li2.innerHTML = '每页&nbsp' + _this.pageLength + '&nbsp条';
  li2.className = 'totalPage';
  this.ul.appendChild(li2);
  var li3 = document.createElement('li');
  li3.innerHTML = '共&nbsp' + _this.dataTotal + '&nbsp条数据';
  li3.className = 'totalPage';
  this.ul.appendChild(li3);
  var li4 = document.createElement('li');
  li4.innerHTML = _this.curPage + "/" + _this.pageTotal;
  li4.className = 'totalPage';
  this.ul.appendChild(li4);
 }
};

3.实例化分页组件

let pageInstance = new Pagination({
 id: 'pagination',
 curPage:1, // 初始页码,不填默认为1
 draw: 0, // 当前渲染次数统计
 pageLength: 10, //每页多少条
 pageSize: 5, //分页个数,不填默认为5
 showPageTotalFlag:true, //是否显示数据统计,不填默认不显示
 showSkipInputFlag:true, //是否支持跳转,不填默认不显示
 ajaxParam: { //分页ajax
  url: 'https://www.easy-mock.com/mock/5cc6fb7358e3d93eff3d812c/page',
  type: "get",
 }
})

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

(0)

相关推荐

  • 使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例

    使用bootstrap-paginator.js 分页来进行ajax 异步分页请求 具体的做法如下 : 首先定义一个异步提交请求的ajax 函数,其完整的函数如下: var nid= $("#lbnid").val(); // 获取当前新闻编号 var cpage = 1; // 当前页面号 var tpage = 10; // 总页面数 function getPaging() { getComment(cpage); //获取新闻评论 } //点击查看新闻评论 $("#o

  • asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码

    复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxJson.aspx.cs" Inherits="AjaxJson" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR

  • js实现ajax分页完整实例

    本文实例讲述了js实现ajax分页的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head&

  • 使用Jquery+Ajax+Json如何实现分页显示附JAVA+JQuery实现异步分页

    先给大家展示下运行效果图:  1.后台action产生json数据. List blackList = blackService.getBlackInfoList(mobileNum, gatewayid, startDate, endDate); int totalRows = blackList.size(); StringBuffer sb = new StringBuffer(); sb.append("{\"totalCount\":\""+to

  • 基于Jquery+Ajax+Json实现分页显示附效果图

    1.后台action产生json数据. List blackList = blackService.getBlackInfoList(mobileNum, gatewayid, startDate, endDate); int totalRows = blackList.size(); StringBuffer sb = new StringBuffer(); sb.append("{\"totalCount\":\""+totalRows+"\

  • Jquery+Ajax+Json+存储过程实现高效分页

    之前在做分页时,很多朋友都是用Jquery分页插件,之前我就用的jquery.paper,有需要的朋友可以联系我,接下来小编给大家分享用Jquery+Ajax+Json+存储过程实现高效分页. 实现此功能用分页存储过程,pagination,js样式,废话不多了,具体请看下面代码  分页存储过程:PAGINATION CREATE PROCEDURE [dbo].[PAGINATION] @FEILDS VARCHAR(),--要显示的字段 @PAGE_INDEX INT,--当前页码 @PAG

  • 基于Jquery+Ajax+Json的高效分页实现代码

    如果说您没用过这些东东的话,我相信看完这篇博文会对您有帮助的,,如果有任何问题不懂或者有bug没问题,欢迎随时联系我, 同时也欢迎高手多给点意见,我不建议在喷子中成长. 本人QQ:364175837 前言 相信很多朋友都用过,Jquery的分页插件,我之前就用的jquery.paper这个,如果有兴趣可以留下QQ,我发份简单的实例源码给您. 该代码是晚上匆忙中完成的,所以没怎么优化,但是主要作为实例来结合这些知识的一个综合运用.好了废话不多说,直接上代码. vs2010+sql2005expre

  • vue.js 表格分页ajax 异步加载数据

    Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API. 分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理. 1.注册一个组件 js Vue.component('pagination',{ template:'#paginationTpl', replace:true, props:['cur','all','pageNum'], methods:{ //页码点击事件 btnClick: f

  • Javascript vue.js表格分页,ajax异步加载数据

    分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理. 效果: 代码: 1.注册一个组件 js Vue.component('pagination',{ template:'#paginationTpl', replace:true, props:['cur','all','pageNum'], methods:{ //页码点击事件 btnClick: function(index){ if(index != this.cu

  • javascript ajax 仿百度分页函数

    复制代码 代码如下: /** * Ajax分页功能 * 在需要分页的地方添加<ul class="pagination"></ol> * 作为分页组件容器元素. * pageCount 总页数 * currentPage 当前页数 * container 带有pagination类的ol容器元素 * loadData 用于加载数据的函数 * version 1.0 */ pagination : function(pageCount, currentPage,

随机推荐