首页 > 编程 > JavaScript > 正文

jQuery 翻页组件yunm.pager.js实现div局部刷新的思路

2019-11-20 09:15:36
字体:
来源:转载
供稿:网友

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

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

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

在没给大家介绍正文之前,先给大家展示下效果图,如果感觉还不错,请继续往下阅读:

这里写图片描述

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

一、如何定义局部刷新的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的idurl : $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="#">← 前一页</a></li>' + '<li class="next"><a href="#">后一页 →</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);function yunmPageBreak(options) {var op = $.extend({rel : "",data : {pageNum : "",},callback : null}, options);if (op.rel) {var $box = $("#" + op.rel);// 获得局部刷新的div后,就可以获得同级的form表单var form = $("form[target=turnPageForm]", $box.parent()).get(0);if (form) {// 第几页if (op.data.pageNum)form[YUNM.pageInfo.pageNum].value = op.data.pageNum;$box.ajaxUrl({type : "POST",url : $(form).attr("action") + "?rel=" + op.rel,data : $(form).serializeArray(),callback : function() {}});}}}

三、翻页应用

封装了翻页组件后,我们来看看怎么使用。

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ include file="/components/common/taglib.jsp"%><c:forEach items="${deal_page}" var="deal">${deal.name}</c:forEach><div class="turnPagePager" rel="${param.rel}" totalCount="${vo.totalCount}" numPerPage="${vo.numPerPage}"currentPage="${vo.pageNum}">

指定div的class为turnPagePager,页面load的时候我们将其转换为pager组件。

将其关键属性rel、totalCount、numPerPage、currentPage进行赋值。

页面load的时候进行转换:

$("div.turnPagePager", $p).each(function() {var $this = $(this);$this.pager({rel : $this.attr("rel"),totalCount : $this.attr("totalCount"),numPerPage : $this.attr("numPerPage"),currentPage : $this.attr("currentPage")});});

以上所述是小编给大家介绍的jQuery 翻页组件yunm.pager.js实现div局部刷新的思路,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表