博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分页模块
阅读量:6799 次
发布时间:2019-06-26

本文共 6883 字,大约阅读时间需要 22 分钟。

一 功能描述

先贴上最终的效果图:

图片描述

首页/尾页/上一页/下一页 的功能就不用我具体解释了吧:)

中间固定显示11个页码(这个数字是用下面代码中的常量DISPLAY_NUM决定的),根据点击的页码数字 a ,分页的变化情况有三种:

(1) 1 <=a <= 5 ,显示效果如上图所示。

(2) 6 <=a <= l-4, 其中l表示总的页码数,效果如下图:图片描述
(3) l-4 <=a <= l, 效果图如下:图片描述

二 代码

  • html 部分

  • js 部分

define([],function(){    var tpl = '\                \                    {
{#total_arr}}\ {
{num}}
\ {
{/total_arr}}\ \ ', default_event_handlers = { to_page: function (e, cur) { return true; }, prev_page: function (e, cur) { return true; }, next_page: function (e, cur) { return true; }, first_page: function (e, cur) { return true; }, last_page: function (e, cur) { return true; } }, DISPLAY_NUM = 11, pages = { /** * * @param {type} opt * { * wrp * that: event_handlers函数调用上下文,默认情况下为this * events: { "to_page": function(event, cur){}, "prev_page": function(evnet, cur){}, "next_page": function(event, cur){}, "first_page": function(event, cur){}, "last_page": function(event, cur){}, } * } * @returns {undefined} */ init: function(opt){ var event_handlers = $.extend({}, default_event_handlers, opt.events), _this = opt.that||this, _that = this; $(opt.wrp).on('click', '.pages .prev-page', function(e){ var before_p = $(this).closest('.pages').find('.cur').data("value"), total_p = $(this).siblings('.last-page').data('value'); before_p = parseInt(before_p); total_p = parseInt(total_p); if (before_p == 1) { return; } var cur = before_p - 1; event_handlers.prev_page.call(_this, e, cur); _that.render(cur, total_p); }).on('click', '.pages .next-page', function(e){ var before_p = $(this).closest('.pages').find('.cur').data("value"), total_p = $(this).next().data("value"); before_p = parseInt(before_p); total_p = parseInt(total_p); if (before_p == total_p) { return; } var cur = before_p + 1; event_handlers.next_page.call(_this, e, cur); _that.render(cur, total_p); }).on('click', '.pages .num', function(e){ var before_p = $(this).closest('.pages').find('.cur').data("value"), total_p = $(this).siblings('.last-page').data('value'), cur = $(this).data("value"); before_p = parseInt(before_p); total_p = parseInt(total_p); cur = parseInt(cur); if (before_p == cur) { return; } event_handlers.to_page.call(_this, e, cur); _that.render(cur, total_p); }).on('click', '.pages .first-page', function(e){ var before_p = $(this).closest('.pages').find('.cur').data("value"), total_p = $(this).siblings('.last-page').data('value'); before_p = parseInt(before_p); total_p = parseInt(total_p); if (before_p == 1) { return; } var cur = 1; event_handlers.first_page.call(_this, e, cur); _that.render(cur, total_p); }).on('click', '.pages .last-page', function(e){ var before_p = $(this).closest('.pages').find('.cur').data("value"), total_p = $(this).data("value"); before_p = parseInt(before_p); total_p = parseInt(total_p); if (before_p == total_p) { return; } var cur = total_p; event_handlers.last_page.call(_this, e, cur); _that.render(cur, total_p); }); }, /** * * @param {type} opt * total * cur * @returns {undefined} */ render: function(cur, total){ if (total == 0) { $('.pages').html(''); return; } var total_arr = this.set_total_array(total, cur), prev_d = (cur == 1) ? 'disabled' : '', next_d = (cur == total) ? 'disabled' : '', content = Mustache.render(tpl, { prev_d: prev_d, next_d: next_d, total_value: total, total_arr: total_arr }); $('.pages').html(content); }, set_total_array: function(total, current){ var total_arr = [], begin_index = 1, end_index = total, begin_threshold = Math.floor(DISPLAY_NUM/2), end_threshold = total + 1 - begin_threshold; if (total <= DISPLAY_NUM) { end_index = total; } else if (current <= begin_threshold) { end_index = DISPLAY_NUM; } else if (current >= end_threshold) { begin_index = total + 1 - DISPLAY_NUM; } else { begin_index = current - begin_threshold; end_index = current + begin_threshold; } for (var i = begin_index; i <= end_index; i++) { var item = {num: i, value: i}; if (current == i) { item.cur = "cur"; } total_arr.push(item); } return total_arr; }, }; return pages;});
  • css 部分

.pages{    text-align: center;    padding: 20px 0;    .prev,.next {        width: auto;        background: transparent;        -moz-box-sizing: border-box;        -webkit-box-sizing: border-box;        box-sizing: border-box;    }    a{        display: inline-block;        width: 18px;        height: 18px;        line-height: 18px;        border-radius: 3px;        text-align: center;        color: #333;        font-size: 14px;        vertical-align: top;        margin-right: 15px;    }    .cur{        background-color: #3b9bf5;        color: white;        text-decoration: none;        cursor: default;    }    .omit{        margin: 0;    }    .clear-margin{        margin-left: -15px;    }    .disabled{        opacity: 0.6;    }}

三 使用示例

  • 模板页面

    图片描述

  • 控制器

首先初始化:图片描述

然后在渲染:图片描述

initrender俩函数的参数见js代码部分注释

转载地址:http://osywl.baihongyu.com/

你可能感兴趣的文章
mysql 主从设计
查看>>
mybatis使用数组批量删除
查看>>
npm scripts 使用指南
查看>>
架构师速成8.1-谈做技术人员的态度
查看>>
千金药方——MongoDB疑难杂症的分析和优化
查看>>
Android应用安全开发之浅谈网页打开APP
查看>>
撕下 Coding iPad 悬赏单的小小感触
查看>>
从文件路径中获取文件名的方法
查看>>
关于Recycle Bin是什么以及实验
查看>>
Android图形显示系统——上层显示1:界面绘制大纲
查看>>
EDB PPAS的"坑" 不兼容PostgreSQL一例
查看>>
"proxy_pass" cannot have URI part in location given by regular expression
查看>>
ExtJS5学习之Grid与Grid之间的数据拖拽
查看>>
后退时保存表单状态
查看>>
poj 2528 Mayor's posters(线段树+离散化)
查看>>
动画绘制水波纹
查看>>
安装xenomai的记实
查看>>
梦幻星空动画
查看>>
用Easing函数实现碰撞效果
查看>>
Python简介
查看>>