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 ...
随机推荐
- 在Salesforce中通过 Debug Log 方式 跟踪逻辑流程
在Salesforce中通过 Debug Log方式 跟踪逻辑流程 具体位置如下所示: Setup ---> Logs ---> Debug Logs ---> Monitored ...
- 标准MDL方法修改Page、NonPage内存的属性
typedef struct _REPROTECT_CONTEXT { PMDL Mdl; PUCHAR LockedVa; } REPROTECT_CONTEXT, * PREPROTECT_C ...
- 滑动listview隐藏和显示顶部布局
需求: 1.listview向下滑动时,隐藏顶部布局 2.listview向上滑动到最上面,显示顶部布局 3.顶部布局的隐藏和显示有过渡效果 4.第一次加载listview时,顶部不要隐藏 布局: 注 ...
- aChartEngine图表显示(一页显示多张图表)
在看本篇的时候,请确认已经看过了 某android平板项目开发笔记----aChartEngine图表显示(1) 不然,有些地方这里就不再说明… 关于XYMutilpleSeriesDataset 一 ...
- POJ 3067 Japan(经典树状数组)
基础一维树状数组 题意:左边一排 1-n 的城市,右边一排 1-m 的城市,都从上到下依次对应.接着给你一些城市对,表示城市这两个城市相连,最后问你一共有多少个交叉,其中处于城市处的交叉不算并且每个 ...
- mysql性能监控相关
目录 一,获取mysql用户下的进程总数 二,主机性能状态 三,CPU使用率 四,磁盘IO量 五,swap进出量[内存] 六,数据库性能状态 七.querylog 八.mysqladmin的exten ...
- RecyclerView再封装
RecyclerView做为ListView的替代品,已经出了很久了,既然是替代品,那自然有些ListView没有的优点.比如说:可以随意切换list,grid,stagger.可以指定一个或多个it ...
- 快消品销售管理系统,PDA销售管理系统,销售拜访PDA,进销存管理PDA系统 移动扫描打印开单POS
各种ERP软件的移动订单及移动车销解决方案是针对各个需要快速.便捷的,通过智能PDA移动智能终端设备实现销售订单下达及快速车销的应用解决方案.通过将移动订单及移动车销集成到ERP的移动解决方案,可以帮 ...
- Java命令行输入求和的简单学习
思想:命令行输入的参数,必须先转换为数字才能进行加法计算,这就需要引用java.util.Scanner; 流程框图: 源代码: //实现几个整数相加的程序 //高开拓,2015.9.26 packa ...
- http://www.roncoo.com/article/detail/124661
http://www.roncoo.com/article/detail/124661