来源:自学PHP网 时间:2014-11-29 13:28 作者: 阅读:次
[导读] 本文主要是将自己动手些jquery分页插件的思路和步骤分享给大家,本分页插件功能很简单,但是却很实用,不想其他插件似的,功能一大堆。好了,废话不多说,还是看正文吧...
工作需要一个JS分页插件,心想自己动手写一个吧,一来上网找一个不清楚代码结构的,出了问题难以解决,而且网上的插件所包含的功能太多,有些根本用不到,就没必要加载那段JS,二来想起没写过jQuery插件,就当练一下手了,好了,先看结果: http://demo.jb51.net/js/2014/EasyPage/ 简单说一下这个插件所要实现的功能 后台将查询出来的内容全部显示到页面上,这个插件要控制这些内容,使其一页一页显示。有上一页,下一页,首页,尾页的功能。在第一页时,上一页,首页要隐藏。在最后一页时,尾页,下一页要隐藏。一次只显示几个按钮,当点击当次最后一个按钮时,显示后面几个。 接下来简单说一下编码过程: 首先可以大胆的先写下以下的代码: //为了更好的兼容性,开始前有个分号 ;( function($){//此处将$作为匿名函数的形参 } )(jQuery)//将jQuery作为实参传递给匿名函数 这段代码大家应该不陌生,就是javascript的神级特性---闭包。这也是jQuery插件的常见结构。为什么要使用闭包来作这jQuery的常用结构呢,一来既可以避免内部临时变量影响全局空间,又可以在插件内部继续使用$作为jQuery的别名。 接下来就是在这个结构里面写自己的方法了,jQuery提供了两种方式可以在jQuery里面扩展方法。打开jQuery API,找到插件机制,可以看到两个方法
jQuery.extend({ "max":function(){ return max; } }) 这样,就相当于在jQuery对象里面添加了一个max方法,调用的时候可以进行这样调用:jQuery.max() 那么,jQuery.fn是什么呢,打开jQuery源码,可以看到 jQuery.fn = jQuery.prototype。那么jQuery.fn.extend相当于在jQuery中添加成员函数。 这样子应该明白两者之间的区别了吧,静态方法可以直接调用,jQuery.max()。成员函数只有jQuery实例可以调用,比如jQuery("#my").max()。 这里我采用jQuery.extend方法。代码如下: ;( function($){ $.extend({ "easypage":function(options){ options = $.extend({//参数设置 contentclass:"contentlist",//要显示的内容的class navigateid:"navigatediv",//导航按钮所在的容器的id everycount:"5",//每页显示多少个 navigatecount:"5"//导航按钮一次显示多少个 }, options); });
easypage就是使用分页插件使用的方法名,contentclass,navigateid,everycount,navigatecount是参数。 基本框架已经搭好了,接下来就是完成功能。 首先是要找到要分页的内容,并生成导航按钮。代码如下: var currentpage = 0;//当前页 var contents = $("."+options.contentclass);//要显示的内容 var contentcount = contents.length;//得到内容的个数 var pagecount = Math.ceil(contentcount/options.everycount);//计算出页数 //拼接导航按钮 var navigatehtml = "<div id='pagefirst' class='pagefirst'><a href='javascript:void(0)'>首页</a></div><div id='pagepre' class='pagepre'><a href='javascript:void(0)'>上一页</a></div>"; for(var i = 1;i <= pagecount;i++){ navigatehtml+='<div class="pagenavigate"><a href="javascript:void(0)">'+i+'</a></div>'; } navigatehtml+="<div id='pagenext' class='pagenext'><a href='javascript:void(0)'>下一页</a></div><div id='pagelast' class='pagelast'><a href='javascript:void(0)'>尾页</a></div>"; //加载导航按钮 $("#"+options.navigateid).html(navigatehtml) 这段代码比较简单,就不多讲。 接下来就是就是实现一些基本的功能,这里抽取其中两个显示
//隐藏所有的导航按钮 $.extend({ "hidenavigates":function(){ //遍历所有的导航按钮 navigates.each(function(){ $(this).hide(); }) } }); //显示导航按钮 $.extend({ "shownavigate":function(currentnavigate){ $.hidenavigates(); //当前按钮如果小于要求一次显示按钮个数的,从0开始显示 var begin = currentnavigate>=options.navigatecount?currentnavigate-parseInt(options.navigatecount):0; //这里保证从第二页开始,按钮的个数都是2*options.navigatecount if(begin>navigates.length-2*options.navigatecount){ begin = navigates.length-2*options.navigatecount; } //开始显示 for(var i = begin;i < currentnavigate+parseInt(options.navigatecount);i++){ $(navigates[i]).show(); } } }); 好了,基本的代码流程就是这样了,程序的源代码在附件中,具体的功能实现在源代码注释中已经解释的挺清楚了。对于闭包还有疑问的,可以查看我上一篇博客,谈谈javascript闭包。 下面总结一下jQuery插件的基本要点,呵呵,从锋利的jQuery中摘录出来的。 •插件的文件名推荐为 jquery.[插件名].js,例如jquery.color.js •在插件内部,this指向的是当前通过选择器获取的jQuery对象,而不像一般的方法那样,例如click()方法,内部的this指向的是DOM元素 •可以通过this.each来遍历所有元素 因为第一次写jQuery插件,可能会有一些地方说的不对,请大家包涵。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com