jQuery翻页yunm.pager.js,涉及div局部刷新(1)

简介: jQuery翻页yunm.pager.js,涉及div局部刷新

前端的翻页插件有很多,bootstrap的翻页界面看起来就不错,做起来也易于上手,但应用于项目中的翻页实现还有有几个难点,分别是:


如何封装一个翻页插件,如题中的yunm.pager.js。

涉及到的div局部刷新该如何做。

翻页的总体流程涉及到的知识点很多,这篇文章我们也主要来关注以上两点,其余的内容,请自悟。


一、效果1

image.png



2、效果2(分局两侧)

image.png



二、如何定义局部刷新的div


翻页时,我们一般只会刷新页面中涉及到翻页的父级div,那么该如何定义呢?


<form rel="support_deal_page" target="turnPageForm" action="${ctx}/initI" method="post">
    <input type="hidden" name="page" value="1" />
    <input type="hidden" name="rows" value="2" />
</form>
<div id="support_deal_page" class="row"></div>


为div定义id,建议为当前页面唯一,如果页面有多个翻页组件。

为div创建一个同级的form表单。

rel属性指向div,表明该form表单属于support_deal_page的div。

target属性为turnPageForm,表明该form为翻页组件的form。

action 参数自然不可或缺。

定义page 的input标签,表明为第一页。

定义rows的input标签,表明每页有显示两个。

div定义完后,页面加载load的时候,我们就可以请求后台(后台怎么处理数据,这里就不罗嗦了),获取第一页的分页数据。

// 根据form的target属性,获取需要分页的div,发起ajax请求。
$("form[target=turnPageForm]", $p).each(function() {
    var $this = $(this);
    YUNM.debug('form[target=turnPageForm]' + $this.selector);
    var rel = $this.attr("rel");
    var $box = $this.parent().find("#" + rel);
    if (rel) {
        $box.ajaxUrl({
            type : "POST",
            // 记录div的id
            url : $this.attr("action") + "?rel=" + rel,
            data : $this.serializeArray(),
            callback : function() {
            }
        });
    }
});
ajaxUrl : function(op) {
    var $this = $(this);
    $.ajax({
        type : op.type || 'GET',
        url : op.url,
        data : op.data,
        cache : false,
        success : function(response) {
            var json = YUNM.jsonEval(response);
            if (json[YUNM.keys.statusCode] == YUNM.statusCode.error) {
                if (json[YUNM.keys.message])
                    $.showErr(json[YUNM.keys.message]);
            } else {
                // ajax请求获取成功后,将局部刷新的内容放到div中
                $this.html(response).initUI();
                if ($.isFunction(op.callback))
                    op.callback(response);
            }
        },
        error : YUNM.ajaxError,
        statusCode : {
            503 : function(xhr, ajaxOptions, thrownError) {
                $.showErr("服务器当前负载过大或者正在维护!" || thrownError);
            }
        }
    });
},

页面首次加载的时候,我们将第一页的数据放到div中,这一步也很简单。


三、封装翻页组件 yunm.pager.js

(function($) {
    $.fn.extend({
        pager : function(opts) {
            // 可参照bootstrap的翻页,为了获得前一页和后一页的按钮组件
            var setting = {
                prev$ : "li.previous",
                next$ : "li.next",
            };
            return this.each(function() {
                var $this = $(this);
                var pc = new Pager(opts);
                // 参照bootstrap翻页
                $this.html('<ul class="pager">' + '<li class="previous"><a href="#">&larr; 前一页</a></li>' + '<li class="next"><a href="#">后一页 &rarr;</a></li>'
                        + '</ul>');
                var $prev = $this.find(setting.prev$);
                var $next = $this.find(setting.next$);
                if (pc.hasPrev()) {
                    // 如果有前一页,绑定前一页事件
                    _bindEvent($prev, pc.getCurrentPage() - 1, pc.rel());
                } else {
                    // 否则置灰
                    $prev.addClass("disabled");
                }
                if (pc.hasNext()) {
                    _bindEvent($next, pc.getCurrentPage() + 1, pc.rel());
                } else {
                    $next.addClass("disabled");
                }
            });
            // 绑定点击事件,主要传递第几页
            function _bindEvent($target, pageNum, rel) {
                $target.bind("click", {
                    pageNum : pageNum
                }, function(event) {
                    yunmPageBreak({
                        rel : rel,
                        data : {
                            pageNum : event.data.pageNum
                        }
                    });
                    event.preventDefault();
                });
            }
        },
    });
    // 翻页的必要参数
    var Pager = function(opts) {
        this.opts = $.extend({
            rel : "", // 用于局部刷新div id号
            totalCount : 0,//总数
            numPerPage : 10,// 默认显示10个
            currentPage : 1,// 当前页
            callback : function() {
                return false;
            }
        }, opts);
    };
    $.extend(Pager.prototype, {
        rel : function() {
            return this.opts.rel;
        },
        // 每页显示多少个
        numPages : function() {
            return Math.ceil(this.opts.totalCount / this.opts.numPerPage);
        },
        // 当前页
        getCurrentPage : function() {
            var currentPage = parseInt(this.opts.currentPage);
            if (isNaN(currentPage))
                return 1;
            return currentPage;
        },
        // 能否向前翻页
        hasPrev : function() {
            return this.getCurrentPage() > 1;
        },
        // 向后翻页
        hasNext : function() {
            return this.getCurrentPage() < this.numPages();
        }
    });
})(jQuery);
相关文章
|
3月前
|
JavaScript
鼠标事件(点击换色)分别使用js和jQuery代码实现
鼠标事件(点击换色)分别使用js和jQuery代码实现
43 1
|
26天前
|
JavaScript 定位技术
jQuery鹰眼视图小地图定位预览插件minimap.js
这是一个jQuery小地图定位预览视图,默认左侧是页面主要内容,minimap.js的好处就是在它的右侧形成一个快速定位通道,产生一个缩小版的页面,即预览效果,可以点击并快速定位到页面的某个位置。简单实用,欢迎下载!
30 0
|
1月前
|
JavaScript 前端开发
局部 JavaScript 变量
JavaScript 中,函数内部使用 `var` 声明的变量为局部变量,仅在函数内可见,函数执行完毕后被删除。全局变量则在函数外部声明,整个页面的脚本和函数均可访问,页面关闭后才被删除。未声明的变量赋值会自动成为 `window` 对象的属性,且在非严格模式下可被删除。
|
3月前
|
JavaScript
分别用jquery和js修改页面元素
分别用jquery和js修改页面元素
38 2
|
3月前
|
JavaScript Java
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
20 1
|
3月前
|
JavaScript 前端开发
JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
这篇文章介绍了JavaScript中对象的基本概念和操作,包括对象属性和方法的使用、对象字面量的创建、函数的定义和作用域的概念,以及全局作用域和局部作用域的区别和特性。
JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
|
3月前
|
存储 JavaScript 前端开发
关于Django使用Jquery异步刷新
使用Django与jQuery结合实现异步刷新功能,不仅可以提升用户体验,还能提高应用的性能。通过上述的步骤,你可以在自己的Django项目中实现类似的异步数据更新功能。这种技术的关键是理解AJAX的工作原理,以及如何在Django后端创建响应AJAX请求的视图。通过实践这些技巧,你将能够创建更为动态和交互式的Web应用。
32 2
|
5月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
5月前
|
移动开发 JavaScript 前端开发
rem的适配方案,css文件和js文件的引入方式,特色小边框的制作,DS-Digital.ttf数字展示屏的使用方法:,自适应图片 background-size,jQuery爆bug,a和盒子居中,
rem的适配方案,css文件和js文件的引入方式,特色小边框的制作,DS-Digital.ttf数字展示屏的使用方法:,自适应图片 background-size,jQuery爆bug,a和盒子居中,
|
5月前
|
缓存 JavaScript 前端开发
老程序员分享:js刷新页面得重新加载和页面的刷新
老程序员分享:js刷新页面得重新加载和页面的刷新
41 0
下一篇
无影云桌面