ajax实现无刷新分页效果
基于jquery.pagination.js实现的无刷新加载分页数据效果。
简介与说明
* 该插件为Ajax分页插件,一次性加载数据,故分页切换时无刷新与延迟。如果数据量较大,加载会比较慢。
* 分页原理:数据总条数/每页显示数=分页总页码
* 修改后,我们不用在第一次请求时将数据一次性加载完,而是按需加载。
简单示例
html
<div id="page-box"></div>
js
$('.page-box').pagination({
    totalData:100,
    showData:5
    coping:true
});
配置信息

API接口

该插件的使用方法网上有很多详细介绍,我就不一一举例描述了。
介绍该插件的原因是我对它做了一些修改。改动不算大,只能说是我用起来比较方便。
改动说明
在页面上放一个隐藏的文本域,用来存放总页数。
1.需要与后端约定好每页显示多少条数据,然后在后端统计总分页数。在前端界面点击分页时,只需要通过ajax传递页码来加载数据。
2.前端也可以自己设置。后端返回数据的总条数,前端可以自己计算总分页数。该方法需要前端向后端发起分页请求时,将每页显示多少条数据作为参数传递给后端。
修改后插件代码
;(function($,window,document,undefined){
	//配置参数
	var defaults = {
		current:1,				//当前第几页,默认为第1页
		prevCls:'page_prev',	//上一页class
		nextCls:'page_next',	//下一页class
		prevContent:'<',		//上一页按钮内容,可更改
		nextContent:'>',		//下一页按钮内容,可更改
		activeCls:'active',		//当前页选中状态
		coping:false,			//首页和尾页
		homePage:'',			//首页节点内容
		endPage:'',				//尾页节点内容
		count:3,				//当前页前后分页个数
		jump:false,				//跳转到指定页数
		jumpIptCls:'jump-ipt',	//文本框内容
		jumpBtnCls:'jump-btn',	//跳转按钮
		jumpBtn:'跳转',			//跳转按钮文本
		callback:function(){}	//回调
	};
	var Pagination = function(element,options){
		//全局变量
		var opts = options,//配置
			current,//当前页
			$document = $(document),
			$obj = $(element);//容器
		/**
		 * 获取总页数
		 * @return int pages 总页数
		 */
		this.getTotalPage = function(){
			var pages = $obj.siblings('input[type="hidden"]').val();
			return pages;
		};
		//获取当前页
		this.getCurrent = function(){
			return current;
		};
		/**
		 * 动态填充分页页码
		 * @param int index 页码
		 */
		this.filling = function(index){
			var html = '';
			current = index || opts.current;//当前页码
			var pageCount = this.getTotalPage();
			if(current > 1){//上一页
				html += '<a href="javascript:;" class="'+opts.prevCls+'">'+opts.prevContent+'</a>';
			}else{
				$obj.find('.'+opts.prevCls) && $obj.find('.'+opts.prevCls).remove();
			}
			if(current >= opts.count * 2 && current != 1 && pageCount != opts.count){
				var home = opts.coping && opts.homePage ? opts.homePage : '1';
				html += opts.coping ? '<a href="javascript:;" data-page="1">'+home+'</a><span>...</span>' : '';
			}
			var start = current - opts.count,
				end = current + opts.count;
			((start > 1 && current < opts.count) || current == 1) && end++;
			(current > pageCount - opts.count && current >= pageCount) && start++;
			for (;start <= end; start++) {
				if(start <= pageCount && start >= 1){
					if(start != current){
						html += '<a href="javascript:;" data-page="'+start+'">'+ start +'</a>';
					}else{
						html += '<span class="'+opts.activeCls+'">'+ start +'</span>';
					}
				}
			}
			if(current + opts.count < pageCount && current >= 1 && pageCount > opts.count){
				var end = opts.coping && opts.endPage ? opts.endPage : pageCount;
				html += opts.coping ? '<span>...</span><a href="javascript:;" data-page="'+pageCount+'">'+end+'</a>' : '';
			}
			if(current < pageCount){//下一页
				html += '<a href="javascript:;" class="'+opts.nextCls+'">'+opts.nextContent+'</a>'
			}else{
				$obj.find('.'+opts.nextCls) && $obj.find('.'+opts.nextCls).remove();
			}
			html += opts.jump ? '<input type="text" class="'+opts.jumpIptCls+'"><a href="javascript:;" class="'+opts.jumpBtnCls+'">'+opts.jumpBtn+'</a>' : '';
			$obj.empty().html(html);
		};
		//绑定点击事件
		this.eventBind = function(){
			var self = this;
			var pageCount = this.getTotalPage();//总页数
			$obj.off().on('click','a',function(){
				if($(this).hasClass(opts.nextCls)){
					var index = parseInt($obj.find('.'+opts.activeCls).text()) + 1;
				}else if($(this).hasClass(opts.prevCls)){
					var index = parseInt($obj.find('.'+opts.activeCls).text()) - 1;
				}else if($(this).hasClass(opts.jumpBtnCls)){
					if($obj.find('.'+opts.jumpIptCls).val() !== ''){
						var index = parseInt($obj.find('.'+opts.jumpIptCls).val());
					}else{
						return;
					}
				}else{
					var index = parseInt($(this).data('page'));
				}
				self.filling(index);
				typeof opts.callback === 'function' && opts.callback(self);
			});
			//输入跳转的页码
			$obj.on('input propertychange','.'+opts.jumpIptCls,function(){
				var $this = $(this);
				var val = $this.val();
				var reg = /[^\d]/g;
	            if (reg.test(val)) {
	                $this.val(val.replace(reg, ''));
	            }
	            (parseInt(val) > pageCount) && $this.val(pageCount);
	            if(parseInt(val) === 0){//最小值为1
	            	$this.val(1);
	            }
			});
			//回车跳转指定页码
			$document.keydown(function(e){
				var self = this;
		        if(e.keyCode == 13 && $obj.find('.'+opts.jumpIptCls).val()){
		        	var index = parseInt($obj.find('.'+opts.jumpIptCls).val());
		            self.filling(index);
					typeof opts.callback === 'function' && opts.callback(self);
		        }
		    });
		};
		//初始化
		this.init = function(){
			this.filling(opts.current);
			this.eventBind();
		};
		this.init();
	};
	$.fn.pagination = function(parameter,callback){
		if(typeof parameter == 'function'){//重载
			callback = parameter;
			parameter = {};
		}else{
			parameter = parameter || {};
			callback = callback || function(){};
		}
		var options = $.extend({},defaults,parameter);
		return this.each(function(){
			var pagination = new Pagination(this, options);
			callback(pagination);
		});
	};
})(jQuery,window,document);
更改后插件使用示例
<body>
    <div class="page-box">
        <input type="hidden" name="pageInput" value="1">
        <div class="page1"></div>
    </div>
    <div class="page-box">
        <input type="hidden" name="pageInput" value="10">
        <div class="page2"></div>
    </div>
    <div class="page-box">
        <input type="hidden" name="pageInput" value="10">
        <div class="page3"></div>
        <p>当前第<span class="now">1</span>页</p>
    </div>
    <script src="js/jquery.min.js"></script>
    <script src="js/jquery.pagination.js"></script>
    <script>
        $(function(){
            $('.page1').pagination({
                coping:true,
                count:2,
            });
            $('.page2').pagination({
                coping:true,
                count:2,
                homePage:'首页',
                endPage:'末页',
                prevContent:'上页',
                nextContent:'下页'
            });
            $('.page2').pagination({
                coping:false,
                count:2,
                homePage:'首页',
                endPage:'末页',
                prevContent:'上页',
                nextContent:'下页'
            });
            $('.page3').pagination({
                coping:true,
                count:2,
                prevContent:'上页',
                nextContent:'下页',
                callback:function(options){
                    var page = options.getCurrent();
                    $('.now').text(page);
                    //这里写ajax请求。传递到后端的参数里一定要有当前页的页码哟。
                }
            });
        });
    </script>
</body>
页面显示截图

ajax实现无刷新分页效果的更多相关文章
- thinkphp ajax 无刷新分页效果的实现
		思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ... 
- javascript项目实战---ajax实现无刷新分页
		分页: limit 偏移量,长度; limit 0,7; 第一页 limit 7,7; 第二页 limit 14,7; 第三页 每页信息条数:7 信息总条数:select count(*) from ... 
- Ajax 实现无刷新分页
		Ajax 实现无刷新分页 
- 在Thinkphp中使用AJAX实现无刷新分页
		在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +------------------------------ ... 
- Ajax做无刷新分页
		1.主页面代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ... 
- knockout Ajax异步无刷新分页 Demo +mvc+bootstrap
		最近工作中web客户端需要用到knockout,在此记录下一些Demo,以后用到的时候查找起来方便.也希望给新入门的knockout使用者一点经验.knockout官方文档.这儿是一个使用knocko ... 
- 学习笔记之AJAX无刷新分页
		利用AJAX实现无刷新分页技术原理: 其主要是利用AJAX的异步处理机制,实现数据的异步传递,它隐藏了客户端向服务端请求数据的状态,在客户端表现为无刷新的显示状态. 实现分页的步骤: 1.客服端点击页 ... 
- 无刷新分页 jquery.pagination.js
		无刷新分页 jquery.pagination.js 采用Jquery无刷新分页插件jquery.pagination.js实现无刷新分页效果 1.插件参数列表 http://www.dtan.so ... 
- ASP.NET Ajax简单的无刷新分页
		最近练习了一些AJAX无刷新分页,写得比较简单,性能不知道怎么样,求大神指点,如有更好的分页提供,欢迎交流! 发话不多说了,直接上代码! 首先从网上下了一个JS分页,感觉挺好用的 (function( ... 
随机推荐
- THUWC2018滚粗记
			THUWC2018滚粗记 前言 又是一篇滚粗记, 不过可能还要写过很多很多篇滚粗记, 才会有一篇不是滚粗记的东西啦 总而言之,我现在还是太菜了 还要过一大段时间我才会变强啦 Day -inf 联赛考完 ... 
- 【noip模拟】tree
			000 ms Memory Limit: 128 MB [吐槽] 点分治点分治点分治 嗯..场上思考树状数组的时候好像傻掉了..反正就是挂了就是了.. [题解] 首先如果没有环的话就是一 ... 
- HBase新的客户端接口
			最近学习接触HBase的东西,看了<Habase in Action>,但里面关于HBase接口都是过时的接口,以下为HBase新的客户端接口: package com.n10k; imp ... 
- php 后端跨域请求
			header("Access-Control-Allow-Origin: http://a.com"); // 允许a.com发起的跨域请求 //如果需要设置允许所有域名发起的跨域 ... 
- 学习笔记-C++ STL iterator与对指针的理解-20170618
			vector的itrerator支持random access #include<iostream> #include<vector> using namespace std; ... 
- Linq to sharepoint
			一.Linq to SharePoint 首先Linq to SharePoint编程语言 C# 和 Microsoft Visual Basic .NET 的一个功能,编译器是 Visual Stu ... 
- 设计模式——观察者模式(C++实现)
			#include <iostream> #include <vector> #include <algorithm> #include <iterator&g ... 
- 【OpenCV-Python:实现人脸、人眼、嘴巴识别】实战(一)
			AI时代的到来,手机上的APP开始应用人脸识别去完成事情,如iphoneX的人脸解锁,百度自动贩卖机的人脸识别系统进行支付,支付宝的人脸识别登录等,提高了使用软件的易用性,但也因为其便利性,在某些市面 ... 
- 初尝Eclipse
			一.选择开发工具 1.Eclipse和JDK 我所选用的是Eclipse开发工具,此工具可以用来编译JAVA语言,但windows系统没有内置的JAVA运行环境,所以需要下载JDK,用来配置JAVA的 ... 
- Vue中axios的使用技巧配置项详解
			使用axios首先要下载axios模块包 npm install axios --save 其次需要在使用的文件中引入 import axios from 'axios' 一.调用axios常见两种方 ... 
