本文实例讲述了jQuery从零开始做一个分页组件功能。分享给大家供大家参考,具体如下:
开始一个组件,毫无目的的写代码是一个不好的习惯,要经历 分析 => 抽象 => 实现 => 应用 四个阶段。
组件DEMO地址:https://github.com/CaptainLiao/zujian/tree/master/pagination
- 分析需求
当前页码显示前后三页,以及在两端显示上一页、下一页
未显示的地方用 ‘...'代替
举个栗子:
假设总共有30页
当前为第一页:1 2 3 4 ... 30 下一页
当前为第二页:上一页 1 2 3 4 5 ... 30 下一页
当前为第三页:上一页 1 2 3 4 5 6 ... 30 下一页
.
当前为第6页:上一页 1 ... 3 4 5 6 7 8 9 ... 30 下一页
.
当前为第29页:上一页 1 ... 26 27 28 29 30 下一页
当前为第30页:上一页 1 ... 27 28 29 30
- 抽象
分析上面的例子,发现决定输出的因素有两个:当前页码和总页数。
于是,我们设定一个函数用来表示当前页码的显示内容:
/** * @param {Number} page 当前页 * @param {Number} totalPage 总页数 */ function pagination(page, totalPage) { var str = ''; // todo... return str; } // 运行函数,打印出值 var ret = pagination(4, 30) console.log(ret) >上一页 1 2 3 4 5 6 7 ... 30 下一页
- 实现
输入和输出都有了,接着正式开始撸:
function pagination(page, totalPage) { var str = page; // 这里实现当前页面显示前后三项功能 for(var i=1; i< totalPage; i++) { if(page-i>1) { str = page-i +' '+ str; } if(page + i < totalPage) { str = str + ' ' + (page+i) } } // 以page为中心,向左右扩展 // 向左,先判断当前page向左的第四个数是否大于 1 if(page-4 > 1) { str = '... ' + page; } // 继续向左判断 if(page >1) { str = "上一页" + '... ' +1 +' ' +str; } // 向右,判断当前page向右的第四个数字是否小于 totalPage if(page + 4 < totalPage) { str = '... '+ str; } if(page < totalPage) { str = str +' ' + totalPage +' '+ '下一页'; } return str; }
现在,我们可以执行下面的函数,取得我们想要的结果:
var total = 30; for(var i = 1; i< total; i++) { var ret = showPage(i, total); console.log(ret) }
至此,我们已经实现了分页的逻辑。
- 应用
接下来的应用就非常简单了,不外乎是给str 加一些标签和class,于是我们就得到了一个分页组件:
HTML:
<ul id="pagination-list" class="clearfix2"> </ul>
javascript:
function pagination(page, totalPage) { var str = '<li class="page-active">'+page+'</li>'; for(var i=1; i<=3; i++) { if(page - i > 1) { str = '<li class="page-item">'+(page-i)+'</li>' +' '+ str; } if(page + i < totalPage) { str = str +" "+'<li class="page-item">'+(page+ i)+'</li>' } } if(page-4 >1) { str = '<li class="page-item">... </li>' +str; } if (page >1) { str= '<li class="page-up">上一页</li>'+ ' '+'<li class="page-item">1</li>' +' '+ str; } if(page+4< totalPage) { str = str+ '<li class="page-item"> ...</li>'; } if(page < totalPage) { str = str + " " +'<li class="page-item">'+totalPage+'</li>' +" " +'<li class="page-down">下一页</li>' } return str; } var totalPage = 30; var str = pagination(1, totalPage); var wrap = $("#pagination-list"); // 这里引用了 jQuery wrap.html(str) .on('click', '.page-item', function () { var cur = parseInt($(this).text()); wrap.html(pagination(cur, totalPage)); });
目前来说,进展顺利,但是!还有很多需要优化的地方:样式固定,不能自由更改;初始化和交互混杂在一起,没有对代码进行封装...
又经过一番折腾,这个分页组件终于完成,下载demo:
https://github.com/CaptainLiao/zujian/tree/master/pagination
现在,我们可以这样调用它:
<script> // #pagination-list 是组件的父容器,50 是总页数。 $(function () { $("#pagination-list").pagination(50); }) </script>
是不是很酸爽呢?
如果继续扩展,我们还可以给组件更多的样式选择......
更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery扩展技巧总结》、《jQuery常用插件及用法总结》、《jQuery切换特效与技巧总结》、《jQuery遍历算法与技巧总结》、《jQuery常见经典特效汇总》、《jQuery动画与特效用法总结》及《jquery选择器用法总结》
希望本文所述对大家jQuery程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 齐豫.2003-THE.UNHEARD.OF.CHYI.3CD【苏活音乐】【WAV+CUE】
- 黄乙玲1986-讲什么山盟海誓[日本东芝版][WAV+CUE]
- 曾庆瑜1991-柔情陷阱[台湾派森东芝版][WAV+CUE]
- 陈建江《享受男声》DTS-ES6.1【WAV】
- 群星《闪光的夏天 第5期》[FLAC/分轨][392.38MB]
- 徐小凤《三洋母带》1:1母盘直刻[WAV+CUE][981M]
- 王菲1995《菲靡靡之音》[香港首版][WAV+CUE][1G]
- 《双城之战》主题小游戏现已上线 扮演金克丝探索秘密基地
- 《霍格沃茨之遗》PS5Pro画面对比:光追性能显著提升
- 《怪猎荒野》PS5Pro主机版对比:B测性能都不稳定
- 黄宝欣.1992-黄宝欣金装精选2CD【HOMERUN】【WAV+CUE】
- 群星.1996-宝丽金流行爆弹精丫宝丽金】【WAV+CUE】
- 杜德伟.2005-独领风骚新歌精选辑3CD【滚石】【WAV+CUE】
- 安与骑兵《心无疆界》[低速原抓WAV+CUE]
- 柏菲唱片-群星〈胭花四乐〉2CD[原抓WAV+CUE]