【自然框架】js版的QuickPager分页控件 V2.0

简介: 优点: 1、  通过更换模板可以控制各个分页元素(比如首页、末页,页号导航等)的位置和是否显示。 2、  通过更换css可以实现各种UI风格和效果。(附带24套css效果) 3、  Js的方式创建分页UI,不占用服务器资源。

优点:

1、  通过更换模板可以控制各个分页元素(比如首页、末页,页号导航等)的位置和是否显示。

2、  通过更换css可以实现各种UI风格和效果。(附带24套css效果)

3、  Js的方式创建分页UI,不占用服务器资源。

4、  可以通过插件的方式更换各部分js代码。如果自带的js代码不能满足您的需求,那么您自己写的插件实现需要的效果。

5、  Ajax的方式获取记录集,减轻网络负担。

6、  多种调用方式,让“偷懒”和灵活共存。

缺点:

1、  不支持SEO。因为用js和ajax,所以不支持搜索引擎的收录。

2、  不支持服务器端控件,比如GridView。

 

内容介绍:

1、  模板

  设置一个htm页面,存放分页用的模板,这样只要保证及格ID不变,其他的都可以随意编排,想怎么编排就怎么编排,限制降到最低。模板如下: 

<div id="PageTurn" class="pager" >
    <span >共<font id="P_RecordCount" style="color:Red;"></font>条记录</span>
    <span >第<font id="P_Index" style="color:Red;"></font>/<font id="P_PageCount" style="color:Red;"></font>页</span>
    <span >每页<font id="P_PageSize" style="color:Red;"></font>条记录</span>
    <span id="S_First" class="disabled" >首页</span>
    <span id="S_Prev"  class="disabled" >上一页</span>
    <span id="S_navi"><!--页号导航--></span>
    <span id="S_Next"  class="disabled" >下一页</span>
    <span id="S_Last"  class="disabled" >末页</span>
    <input id="Txt_GO" class="cssTxt" name="Txt_GO" type="text" size="1"  /> 
    <span id="P_GO" >GO</span>
</div>

  

2、  Css

  用css来控制UI样式。这样更换css文件就可以实现更换风格。前一阵子有园友分享了24套样式,借鉴了一下。在这里大家一起感谢园友的分享。 

div.pager {
    text-align: center; padding-bottom: 10px; background-color: #000; margin: 3px; padding-left: 3px; padding-right: 3px; color: #a0a0a0; font-size: 80%; padding-top: 10px
}
div.pager a {
    background-image: url(bar.gif); border-bottom: #909090 1px solid; border-left: #909090 1px solid; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; background-position: 50% bottom; color: #c0c0c0; border-top: #909090 1px solid; margin-right: 3px; border-right: #909090 1px solid; text-decoration: none; padding-top: 2px
}
div.pager a:hover {
    background-image: url(invbar.gif); border-bottom: #f0f0f0 1px solid; border-left: #f0f0f0 1px solid; background-color: #404040; color: #ffffff; border-top: #f0f0f0 1px solid; border-right: #f0f0f0 1px solid
}
div.pager a:active {
    background-image: url(invbar.gif); border-bottom: #f0f0f0 1px solid; border-left: #f0f0f0 1px solid; background-color: #404040; color: #ffffff; border-top: #f0f0f0 1px solid; border-right: #f0f0f0 1px solid
}
div.pager span.current {
    border-bottom: #ffffff 1px solid; border-left: #ffffff 1px solid; padding-bottom: 2px; background-color: #606060; padding-left: 5px; padding-right: 5px; color: #ffffff; border-top: #ffffff 1px solid; font-weight: bold; margin-right: 3px; border-right: #ffffff 1px solid; padding-top: 2px
}
div.pager span.disabled {
    border-bottom: #606060 1px solid; border-left: #606060 1px solid; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; color: #808080; border-top: #606060 1px solid; margin-right: 3px; border-right: #606060 1px solid; padding-top: 2px
}
 

 

3、  Js脚本

  分为三个部分,默认值、主体和扩展。

  默认值就不用多说了,要想让分页能够顺利跑起来需要设置很多属性,但是过多的属性设置就很烦了,于是就有了“默认值”。常用的属性值作为默认属性,这样在调用的时候就不用重复设置一大堆的属性了。

Nature.Page.QuickPagerDefaultInfo = { 
    recordCount: -1,        //总记录数
    pageSize: 10,           //一页记录数
    pageCount: -1,          //总页数,不用设置,根据上两个条件自动计算
    thisPageIndex: 1,       //当前页号
    beforePageIndex: 1,     //上一次的页号
    //lastPageIndex: 0,     //最后一页的页号,自动计算

    naviCount:7,            //页号导航的数量
    isUseRecordCount: true,   //是否使用缓存的总记录数

    pageTurnDivIDs: "",           //放置分页控件的div的id,可以是多个,用半角逗号分隔
    
    //分页控件模板的路径和文件名
    templetPath:"/aspnet_client/QuickPager/PageTurn2.htm",  
    //分页控件css文件的路径和文件名
    cssPath: "/aspnet_client/QuickPager/skin/default/pager.css",
     
    OnPageChange: function () { },  //翻页的事件
    NaviCreate: function () { },    //创建页号导航
    SetPageUI: function () { },    //设置分页UI
    RegPagerEvent: function () { }    //注册分页UI的事件,不包括页号导航的事件
    
    
};

 

  主体,这个主体有一点MVC里的C的感觉——总体上的控制:加载模板、设置UI、创建页号导航、注册翻页事件等等。他本身并不实现具体的功能,而是把这些功能组合起来。

//js版的QuickPager
Nature.Page.QuickPager = function () {
    this.pagerInfo = {};
    this.Start = function (callback) {
        //设置默认值
        setDefaultInfo(this.pagerInfo);
        var info = this.pagerInfo;

        //设置css。如果没有设置,则不动态加载
        if (info.cssPath != undefined)
            Nature.CommonFunction.addStyle(info.cssPath);

        //加载模板
        $.get(info.templetPath, function (data) {
            //alert("加载分页模板成功");

            //模板放到div里面
            var tmpdiv = info.pageTurnDivIDs.split(",");
            $("#" + tmpdiv[0]).html(data);

            if (info.recordCount != -1) info.SetPageUI(info); //设置分页UI

            info.RegPagerEvent(info); //注册事件(仅限上一页、下一页、首页、末页,不包括页号导航)
            info.NaviCreate(info); //设置页号导航

            //调用外部函数,提取记录创建table
            info.OnPageChange(0, 1);

            if (callback != undefined)
                callback(); //回调

            //克隆多个分页UI
            if (tmpdiv.length > 1) {
                window.setTimeout(function () {
                    var pageHtml = $("#" + tmpdiv[0]).clone(true);
                    for (var i = 1; i < tmpdiv.length; i++) {
                        $("#" + tmpdiv[i]).html(pageHtml);
                    }
                }, 100);
            }

        });
    };

    //设置默认值
    var setDefaultInfo = function (a) {
        var b = Nature.Page.QuickPagerDefaultInfo;
        if (a.recordCount == undefined) a.recordCount = b.recordCount;
        if (a.pageSize == undefined) a.pageSize = b.pageSize;
        if (a.pageCount == undefined) a.pageCount = b.pageCount;
        if (a.thisPageIndex == undefined) a.thisPageIndex = b.thisPageIndex;
        if (a.beforePageIndex == undefined) a.beforePageIndex = b.beforePageIndex;
        if (a.isUseRecordCount == undefined) a.isUseRecordCount = b.isUseRecordCount;
        if (a.naviCount == undefined) a.naviCount = b.naviCount;

        if (a.templetPath == undefined) a.templetPath = b.templetPath;

        if (a.NaviCreate == undefined) a.NaviCreate = Nature.Page.QuickPagerExtend.CreateNavi;
        if (a.SetPageUI == undefined) a.SetPageUI = Nature.Page.QuickPagerExtend.SetPageUI;
        if (a.RegPagerEvent == undefined) a.RegPagerEvent = Nature.Page.QuickPagerExtend.RegPagerEvent;

    };
}; 

  

  扩展,每一个功能都作为了一个扩展插件的形式,比如创建页号导航。页号导航有很多总形式,一中形式肯定不能满足所有人的需求,那么怎么办呢?把每种形式都罗列出来吗?这样整个分页代码就会比较臃肿。所以就想到了这种扩张的形式。在主体外面实现页号导航的功能,在主体里调用。如果自带的不能满足,那么可以把自己写一个替换掉自带的。而总体结构不会发生变化。达到了“对扩展开放,对修改关闭”。

 

使用方法:

1、  设置“属性”。

  虽然属性有很多,但是最低只需要设置两个属性——总记录数和存放分页控件的容器ID。

  不设置总记录数,就不知道有多少页,页号导航就做不出来,UI也没法控制。而总记录数又没法设置默认值。

  存放分页控件的容器ID,简单的说就是DIV的ID,当然也可以放在td里面,只要设置好ID就行。如果要实现上下两个分页UI,那么只需要把这两个ID用半角逗号分割,设置上就行。

2、  设置事件。

  翻页的时候触发的事件。Js的事件处理真的是太简单了,就跟属性一样。弄个function就可以了。

  翻页的时候触发OnPageChange ,传递过来两个参数,一个是翻页前的页号(oldPageIndex),一个是要翻到哪一页( thisPageIndex)。

3、  开始呈现。

  属性和事件设置好了之后就可以呈现了。调一个函数就可以,内部会自动调用OnPageChange(0,1)来呈现第一页的数据。如果呈现之后还要做点什么的话,可以加一个回调函数。

 window.onload = function () {

        var page = new Nature.Page.QuickPager();

        //设置相关属性
        page.pagerInfo = {
            recordCount: 102,       //总记录数
            //pageSize: 10,           //一页记录数
            pageTurnDivIDs: "divQuickPage1",         //放置分页控件的div的id,可以是多个,用半角逗号分隔

            //翻页的事件
            OnPageChange: function (oldPageIndex, thisPageIndex) {
                alert("翻页前页号:" + oldPageIndex);
                alert("翻页后页号:" + thisPageIndex);

                //可以自行获取记录,创建table
            }
        };

        //开始
        page.Start(function () {
            //内部自动调用OnPageChange(0,1)。
        });

    };

 

在线演示:

http://www.naturefw.com/test/quickpager/PageTurn01.htm  

可以更换模板,可以更换css

  

鸣谢!

  感谢群里的兄弟们帮忙做测试,发现了几个小bug和没注意到的地方。

  如果大家也挺感兴趣的话,欢迎加群:82598514

 

 

 

 

相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
7天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
91 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
缓存 监控 JavaScript
Vue.js 框架下的性能优化策略与实践
Vue.js 框架下的性能优化策略与实践
|
2月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
43 2
|
2月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
2月前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
56 4
|
3月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
72 1
|
2月前
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
40 0
|
2月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
2月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
39 0