jQuery自动分页功能
javascript实现网页自动分页的插件
2015年09月02日
javascript实现网页自动分页的插件
2015年09月02日
1. 我想要实现,点击某个标签就只显示含有该标签的文章,别的隐藏。这就需要给文章(<article>)加上class,值为tag-XX。比如文章标签是"jQuery",那么class="tag-jQuery"。显然tag不能有中文。我用的是jekyll模板语言,可以自动给加上class。当然你也可以用别的方法,总之加上class就行了
<article class="『% for tag in post.tags %} tag-{『tag』} 『% endfor%』">
这里是文章的标题,摘要信息。(我插入了一些jekyll代码,大括号会被解析,所以看到『换成{就能行了)
</article>
2. 我还需要一个导航栏和标签云。
导航栏
<nav class="pagination" role="navigation">
<a id="fristpage" class="newer-posts" href="">
<i class="fa fa-angle-double-left"></i></a>
<a id="prepage" class="newer-posts" href=""><i class="fa fa-angle-left"></i></a>
<span id="pagenumber" class="page-number">第 页/共页<i class="fa caret-up"></i> </span>
<a id="nextpage" class="older-posts" href=""><i class="fa fa-angle-right"></i></a>
<a id="lastpage" class="older-posts" href=""><i class="fa fa-angle-double-right"></i></a>
</nav>
标签云,同样基于jekyll,加上了地址栏参数l
<a href='{『site.baseurl』}/index.html?currentPage=1&displayTag=All'>ALL</a>
『% for tag in site.tags %』
<a href='{『site.baseurl』}/index.html?currentPage=1&displayTag={『tag[0]』}'>{『tag[0]』}</a>
『% endfor %』
var Paginate = {
postTotal:0, //某Tag总文章数()
displayTag:"All",//要显示的标签
paginateNum:3,//每页的文章数量
maxPage:1, //最大页码
currentPage:1,//当前页码
//根据Tag 为Article设置Index 并输出该Tag下的postTotal maxPage
SetIndex:function(tag){
if(tag==null){tag="All";}
//1——设置当前Tag
this.displayTag=tag;
//2——设置Index
tag="tag-"+tag;
var num=0;
$("article").each(function(index,element){
$(element).attr("originIndex",index.toString());
if(tag=="tag-All"){
$(element).attr("currentIndex",index.toString());
num++;
}
else{//判断Article中是否有Tag Class
if($(element).hasClass("indexhtml") && $(element).hasClass(tag)){
$(element).attr("currentIndex",num.toString());
num++;
}else{
$(element).attr("currentIndex","-1");
}
}
});
//3——输出参数
this.postTotal=num;//文章总数
var varmaxPage=num/this.paginateNum;
this.maxPage=Math.ceil(varmaxPage);//最大页码
this.result=this.maxPage;
},
//设置页脚导航栏格式 pageNum当前页数
SetNavBar:function(pageNum){
//容错
if(pageNum==null) pageNum=1;
pageNum=Math.ceil(pageNum);
if(pageNum>this.maxPage) pageNum=this.maxPage;
if(pageNum<1) pageNum=1;
//设置当前页码
this.currentPage=pageNum;
//1——修改页脚导航栏,给链接加上地址栏参数
if(pageNum>1){
$("#fristpage").show();
$("#prepage").show();
var prepage=pageNum-1;
$("#fristpage").attr('href','/index.html?currentPage=1&displayTag='+this.displayTag);
$("#prepage").attr('href','/index.html?currentPage='+prepage.toString()+'&displayTag='+this.displayTag);
} else {
$("#fristpage").hide();
$("#prepage").hide();
}
if(pageNum<this.maxPage){
$("#lastpage").show();
$("#nextpage").show();
var nextpage=pageNum+1;
$("#lastpage").attr('href','/index.html?currentPage='+this.maxPage.toString()+'&displayTag='+this.displayTag);
$("#nextpage").attr('href','/index.html?currentPage='+nextpage.toString()+'&displayTag='+this.displayTag);
} else {
$("#lastpage").hide();
$("#nextpage").hide();
}
$("#pagenumber").html("第 "+pageNum.toString()+" 页/共 "+this.maxPage.toString()+" 页");
},
//分页 根据当前页码显示或隐藏Article
Paging:function(){
//1——计算得到Article的显示范围 最小为0
var minIndex=(this.currentPage-1)*this.paginateNum;
var maxIndex=this.currentPage*this.paginateNum-1;
//2——根据currentIndex隐藏或显示Article
$("article").each(function(index, element) {
var currentIndex=$(element).attr("currentIndex");
if(currentIndex>=minIndex && currentIndex<=maxIndex){
$(element).show(1000);
}else{
$(element).hide(1000);
}
});
}
};
然后我们需要一个解析地址栏参数的函数。如果没有参数则返回null
//作用 得到地址栏参数
function GetUrlPara(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r!=null) return unescape(r[2]); return null; //返回参数值
}
然后我们调用函数,实现功能
var currentPage=GetUrlPara("currentPage");
var displayTag=GetUrlPara("displayTag");
Paginate.SetIndex(displayTag);
Paginate.SetNavBar(currentPage);
Paginate.Paging();