Js分页插件,支持页面跳转
这里先给出API:
你只需要提供一个对象涉及以下几项属性,你来设置属性值,通过jq对象链式调用page()以参数形式来加载这个对象,按照参数要求会自动生成分页功能,
参数中pageEvent是可以让你自定义每个按钮按下时触发的事件,实际运用中你可以在事件中用ajax请求来实现分页,具体例子可以参照page.html文件.
建议使用1.8及1.8以前版本的jquery库,因为live()函数可能不支持.引用格式如下:
var o1={
prePage:"上一页",
nextPage:"下一页",
totalItems:100,
pageItems:5,
maxPages:8,
pageEvent:exampleFunc, //当前选取的jquery对象为参数 }; function exampleFunc(jq){
alert(jq.html());
return jq;
} $(".a1").page(o1);
具体代码如下:
;(function($,window,document,undefined){
var defaults={ prePage:"上一页",
nextPage:"下一页",
totalItems:1,
pageItems:5,
maxPages:8,
pageEvent:exampleFunc, //当前选取的jquery对象为参数
}; function exampleFunc(jq){
alert(jq.html());
return jq;
} function Paper($elm,options){ this.$elm=$elm;
this.options=options;
this.init(); }; var temp=[]; //存储html字符串的数组
var items=[]; //存取页数的数组
var a=0;
var teams=0;
var totalPages; //总页数
var prePage;
var nextPage; var $elm; //选取的当前dom对象的jquery对象
var endTeam;
var maxPages;
var dispatcher="跳转到";
var endWord="页";
Paper.prototype={
init:function(){
this.renderHtml();
this.bindEvent(); },
renderHtml:function(){
if(this.options.totalItems==0){alert('无内容!');} var divStr; if(this.options.totalItems%this.options.pageItems<this.options.pageItems && this.options.totalItems%this.options.pageItems!=0){totalPages=parseInt(this.options.totalItems/this.options.pageItems)+1;}else{totalPages=parseInt(this.options.totalItems/this.options.pageItems);} teams=parseInt(totalPages/this.options.maxPages); //组数
endTeam=totalPages%this.options.maxPages; //这个是最后一组的个数 var that=this.options.maxPages;
//将所有页组数存进二维数组中
(function(){ for(var i=0;i<teams;i++){
items[i]=[];
for(var j=0;j<that;j++){ items[i][j]=j;
}
} if(endTeam!=0){ items[teams]=[];
for(var c=0;c<endTeam;c++){ items[teams][c]=c;
}
} })(); for(var i=0;i<items[0].length;++i){
divStr="<div class='bg'><a href='#'>"+(a*this.options.maxPages+i+1)+"</a></div>";
temp.push(divStr);
}
temp.unshift("<div class='start'>"+this.options.prePage+"</div>");
temp.unshift("<div class='total'>共有"+totalPages+"页</div>");
temp.push("<div class='end'>"+this.options.nextPage+"</div>");
temp.push("<div class='bg2'>"+dispatcher+"</div>");
temp.push("<input class='input' placeholder='1'>");
temp.push("<div class='bg3'>"+endWord+"</div>"); this.$elm.html(temp.join("")); },
bindEvent:function(){
var Pages=this.options.totalItems/this.options.pageItems; //总页数
var prePage=this.options.prePage;
var nextPage=this.options.nextPage;
var $elm=this.$elm;
var that= this.options;
maxPages=this.options.maxPages; //点击相应某页
$(".bg").live("click",function(){
that.pageEvent($(this).children("a"));
$(this).children("a").css("color","red");
$(this).siblings().children("a").css("color","#fff"); }); //点击上一页
$(".start").live("click",function(){
if(a>0)a=a-1;
else return;
temp=[];
for(var i=0;i<items[a].length;++i){ divStr="<div class='bg'><a href='#'>"+(a*maxPages+1+i)+"</a></div>";
temp.push(divStr);
} temp.unshift("<div class='start'>"+prePage+"</div>");
temp.unshift("<div class='total'>共有"+totalPages+"页</div>");
temp.push("<div class='end'>"+nextPage+"</div>");
temp.push("<div class='bg2'>"+dispatcher+"</div>");
temp.push("<input class='input' placeholder='1'>");
temp.push("<div class='bg3'>"+endWord+"</div>");
$elm.html(temp.join(""));
}); //点击下一页
$(".end").live("click",function(){
temp=[]; //temp初始为空数组 if(items[teams]===undefined){ //最后剩余的一组不存在
if(a<teams-1)a=a+1;
else return;
for(var i=0;i<items[a].length;++i){ divStr="<div class='bg'><a href='#'>"+(a*maxPages+1+i)+"</a></div>";
temp.push(divStr);
}}else{
if(a<teams)a=a+1;
else return;
for(var i=0;i<items[a].length;++i){ divStr="<div class='bg'><a href='#'>"+(a*maxPages+1+i)+"</a></div>";
temp.push(divStr);
}};
temp.unshift("<div class='start'>"+prePage+"</div>");
temp.unshift("<div class='total'>共有"+totalPages+"页</div>");
temp.push("<div class='end'>"+nextPage+"</div>");
temp.push("<div class='bg2'>"+dispatcher+"</div>");
temp.push("<input class='input' placeholder='1'>");
temp.push("<div class='bg3'>"+endWord+"</div>");
$elm.html(temp.join(""));
});
//点击跳转
$(".bg2").live("click",function(){ temp=[];
var input=$(".input").val(); if(isNaN(parseInt(input))==true) a=1; //字符类型字符串,包括空字符
else{ if(input%maxPages===0) a=parseInt(input/maxPages);
else{
a=parseInt(input/maxPages)+1;
var c=input%maxPages;
}
}
a=a-1;
for(var i=0;i<items[a].length;++i){ divStr="<div class='bg'><a href='#'>"+((a)*maxPages+1+i)+"</a></div>";
temp.push(divStr);
} temp.unshift("<div class='start'>"+prePage+"</div>");
temp.unshift("<div class='total'>共有"+totalPages+"页</div>");
temp.push("<div class='end'>"+nextPage+"</div>");
temp.push("<div class='bg2'>"+dispatcher+"</div>");
temp.push("<input class='input' placeholder='1'>");
temp.push("<div class='bg3'>"+endWord+"</div>");
$elm.html(temp.join(""));
});
}
}; $.fn.page=function(options){
var options=$.extend(defaults,options||{});
return new Paper($(this),options);
} })($,window,document);
这里个给出一个引用例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Page</title>
<script src="../jquery/jquery.js"></script>
<script src="page.js"></script>
<style>
#cont{position: relative;top:10px;left:50px;}
#a1{position:relative;top:20px;left:10px;}
.bg{width:30px;height:30px;margin-left:10px;background: #456;float:left;margin-top:10px;text-align: center;line-height: 30px;border-radius:5px;}
a{text-decoration: none;color:#fff;}
.start{width:100px;height:30px;float:left;margin-top: 10px;text-align: center;line-height: 30px;color:#fff;background: #456;cursor:pointer;margin-left: 10px;border-radius:5px;}
.end{width:100px;height:30px;float:left;margin-top: 10px;text-align: center;line-height: 30px;color:#fff;background: #456;margin-left:10px;cursor:pointer;border-radius:5px;}
.total{width:120px;height:30px;float:left;margin-top:10px;text-align:center;line-height:30px;background: #456;color: #fff;border-radius:5px;} .bg2{width:100px;height:30px;margin-left:10px;background: #456;float:left;margin-top:10px;text-align: center;line-height: 30px;border-radius:5px;color: #fff;}
.bg3{width:30px;height:30px;margin-left:10px;background: #456;float:left;margin-top:10px;text-align: center;line-height: 30px;border-radius:5px;color: #fff;}
.input{width:50px;height:25px;margin-left:10px;float:left;margin-top:10px;text-align: center;line-height: 30px;border-radius:10px;} </style>
</head>
<body>
<div id="cont">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li> </ul>
</div>
<div id="a1"></div>
<!-- <div class=""><span class="bg2">跳转到</span><input class="input" type="text"><span class="bg3">页</span> --><!-- </div> -->
<script>
var o1={
prePage:"上一页",
nextPage:"下一页",
totalItems:100,
pageItems:5,
maxPages:8,
pageEvent:exampleFunc, //当前选取的jquery对象为参数 }; //一个模拟的json数据对象,这里太长我就简单给出几页数据,建议你用一些框架的列表渲染模式来实现列表生成,这里我手写li是为了让不了解框架的同学也能看到效果。实际运用可以用ajax请求获取这个json对象 var data={
1:[1,2,3,4,5],
2:[6,7,8,9,10],
3:[11,12,13,14,15],
4:[16,17,18,19,20],
5:[21,22,23,24,25],
6:[26,27,28,29,30],
7:[31,32,33,34,35],
8:[36,37,38,39,40]
} function exampleFunc(jq){
var index=jq.html();
$("#cont ul li:first").html(data[index][0]);
$("#cont ul li:first").next().html(data[index][1]);
$("#cont ul li:first").next().next().html(data[index][2]);
$("#cont ul li:first").next().next().next().html(data[index][3]);
$("#cont ul li:first").next().next().next().next().html(data[index][4]);
} //这句是关键句
$("#a1").page(o1);
</script>
</body>
</html>
模拟的json数据对象,这里太长我就简单给出几页数据,建议你用一些框架的列表渲染模式来实现列表生成,这里我手写li是为了让不了解框架的同学也能看到效果。实际运用可以用ajax请求获取这个json对象
写下这个插件,花了一些时间,很大的原因是为了培养自己能够熟练造轮子的能力,同时也是锻炼自己Js代码的功力,不管你是为了直接使用,还是学习,都可以下载这个插件的源码,我把代码放到了github上,地址是:https://github.com/Johnharvy/Page-plug-in.我很喜欢Js,是一名入职不久的前端,喜欢钻研Js及前端技术,还有Js越来越多和成熟的运行环境,如果你也是如此,希望在这条路上交您这位朋友,互相学习。有意者可以加我扣扣1667582186(注明博客园),真心交喜欢Js的朋友,和你一起走向大神之路。
Js分页插件,支持页面跳转的更多相关文章
- 一款基于Bootstrap的js分页插件bootstrap-paginator使用实例
Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态的改变,以及事件来监听用户的动作 ...
- Bootstrap的js分页插件属性介绍
Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富,个人觉得这款插件已经无可挑剔了.它提供了一系列的参数用来支持用户的定 制,提供了公共的方法可随时获得插件状 ...
- Jquery.Page.js 分页插件的使用
1.简单直接贴代码 需要引用以下样式和脚本 <link href="~/Scripts/Page/pager.css" rel="stylesheet" ...
- JQuery.Page.js分页插件的使用
1.简单直接贴代码 需要引用以下样式和脚本 <link href="~/Scripts/Page/pager.css" rel="stylesheet" ...
- js分页插件
//分页插件1function showView(option) { //参数定义id,页容量,当前页,总数,页总数 var id = option.id, pageSiz ...
- JS页面跳转和js对iframe进行页面跳转、刷新
一.js方式的页面跳转1.window.location.href方式 <script language="JavaScript" type="text/ja ...
- JS是否确认提示 +页面跳转
JS友好提示 +页面跳转 function logout()...{if (confirm("你确定要注销身份吗?是-选择确定,否-选择取消"))...{window.locati ...
- twbsPagination.js分页插件
分页插件在使用时注意,如果页面中存在其他异步加载的数据,在运行分页方法第一次后,页面上的分页样式与分页中的data数据就是第一次的数据,如果异步加载重新在页面上录入数据,并希望分页继续在新的数据上实现 ...
- 微信小程序插件内页面跳转和参数传递(转)
在此以插件开发中文章列表跳传文章详情为例. 1.首先在插件中的文章列表页面wxml中绑定跳转事件. bindtap='url' data-id="{{item.article_id}}&qu ...
随机推荐
- zookeeper源码分析二FASTLEADER选举算法
如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是"electionAlg",其中1 ...
- python数学运算的类型转换
类型转换 Rational类实现了有理数运算,但是,如果要把结果转为 int 或 float 怎么办? 考察整数和浮点数的转换: >>> int(12.34) 12 >> ...
- Nginx日志定时切割脚本
nginx的日志文件如果你不处理,将变得越来越大,我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志.在你未重新打开 ...
- Android回调接口的写法
方法一: 定义一个接口,里面写想要对外提供的方法,在逻辑层方法的参数里传递进去,让在需要的时候调接口里的方法. 实例一: public class SmsUtils { public interfac ...
- matlab坐标外围背景变白色
set(gcf,'Color',[1,1,1]) 默认图片是这样的: 出图之前使用命令,外围变白后效果如下:
- 通俗理解T检验与F检验的区别【转】
转自:http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html1,T检验和F检验的由来一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错 ...
- mysql 如何判断 "字符串" 是否为 "数字"
这个问题有点怪 ,但很多时候我们会以字符串的形式存储数字 , 反过来我们用字符串进行数学运算时, 好像也不会出错 . 除非 , 用作数学运算的字符串不能转换成数字 .但是我们改如何判断字符串是否能转换 ...
- BZOJ4657 : tower
显然只有横向和纵向的两个炮塔才有可能冲突. 考虑最小割,将每个炮塔所有能攻击到的位置建点,相邻之间连无穷的边,表示前缀和关系,即选了一个点,就必须要选所有比它近的点. 属于横向炮塔的点向$S$连边,容 ...
- webpack入门教程
注:本文内容比较基础,供初学者快速入门参考. 更多详细信息请参考官方文档. 本文同步发布于我的博客,欢迎关注^_^ 1. 安装 npm install -g webpack 2. 基本使用 假设项目文 ...
- javac命令出现“**.java使用了未经检查或不安全的操作”
Collection col=new ArrayList();引发了“**.java使用了未经检查或不安全的操作”错误, 这是因为JDK1.5中引进了泛型,但是你的ArrayList却没有采用,所有会 ...