`

javascript 滚动分页

 
阅读更多
由于这两天项目用到滚动分页 ,所以写了个处理滚动分页的js类 备用吧当,调用只需
new ScrollPage({...});//配上相应参数就好了。。。
function ScrollPage(config){

    this.config = config;
    this.defaultLoadingTemplate = "<tr id='default_loading'  style='text-align:center'><td  style='text-align:center' colspan='6' >努力加载中...</td></tr>";
    this.scrollTarget = config.scrollTarget;
    this.hasLoad = true;
    this.pageNo  = config.pageNo ? config.pageNo:1;
    this.data = !config.data ? {"pageNo": this.pageNo}:config.data;
    this.dataType = config.dataType?config.dataType:"html";
    this.url = config.url?config.url:config.getUrl();
    this.type = config.type?config.type:"get";
    this.appendTarget = config.appendTarget;
    this.responseData  = "";
    this.responseHandler = "";
    this.httpCode = 200;
    this.hasError = false;
    this.loadingTarget = config.loadingTarget?config.loadingTarget:this.defaultLoadingTemplate;

    this.before = {};

    this.after = {};

    this.finally = {};

    this.init();

}
ScrollPage.prototype.init = function(){
    //张定事件
    this.addScrollListener(this);
    var obj = this;
    //before涵数初始化
    if(!this.config.before){//添加默认执行前的拦截器
        this.addBefore(function(){
            $(obj.appendTarget).after(obj.loadingTarget);
        });
    }else{
        this.addBefore(obj.config.before);////用户自定义的拦截器
    }
    //after函数初始化

    if(!this.config.responseHandler){//默认的处理器
        this.addAfter(function(){
            $(obj.appendTarget).append(obj.responseData);
            obj.increamentPageNo();
        })

    }else{
        this.addAfter(this.config.responseHandler);//用户自定义的拦截器
    }

    //finally涵数初始化 默认必需处理的
    this.addFinally(function(){
        var s_top = $(obj.scrollTarget).get(0).scrollTop;
        $(obj.scrollTarget).get(0).scrollTop = s_top-5;//往上调一点
        $(obj.loadingTarget).hide();
    })
    //用户自定义的 final
    if(this.config.complete){
        this.addFinally(this.config.complete)
    }

}
ScrollPage.prototype.addScrollListener= function(obj){
    $(obj.scrollTarget).scroll(function(){
        var targetHight = $(obj.scrollTarget).height();
        var scrollHight = $(obj.scrollTarget)[0].scrollHeight;
        var scrollTop = $(obj.scrollTarget)[0].scrollTop;
        //触底了 要加载数据了
        if(scrollTop + targetHight >= scrollHight){
            obj.execute(obj);
        }
    });
};
//设置是否加载了
ScrollPage.prototype.setHasLoad = function(hasLoad){this.hasLoad = hasLoad;};
ScrollPage.prototype.getHasLoad = function(){ return this.hasLoad;};

//post数据
ScrollPage.prototype.setData = function(data){this.data = data;};
ScrollPage.prototype.getData = function(){ return this.data;};

//pageNo+1
ScrollPage.prototype.increamentPageNo = function(){
    this.pageNo ++ ;
    this.data.pageNo = this.pageNo;
};
ScrollPage.prototype.getPageNo = function(){ return this.pageNo};

//添加请求前的处理器
ScrollPage.prototype.addBefore = function(before){
    var key = "before_" + this.before.length;
    this.before.key = before;
};
//添加响应后的
ScrollPage.prototype.addAfter = function(after){
    var key = "after_" + this.after.length;
    this.after.key = after;
};
//添所有最后的处理器
ScrollPage.prototype.addFinally = function(final){

    var key = "finally_" + this.finally.length;
    this.finally.key = final;
};

ScrollPage.prototype.setResponseData = function(data){this.responseData = data;};
ScrollPage.prototype.getResponseData = function(){ return this.responseData;};

ScrollPage.prototype.setUrl = function(url){this.url = url;};
ScrollPage.prototype.getUrl = function(){ return this.url;};

ScrollPage.prototype.handleBefore = function(){
    this.setHasLoad(false);
    for(var fun in this.before){
        this.before[fun]();
    }
}
ScrollPage.prototype.handleAfter = function(){
    for(var fun in this.after){
        this.after[fun]();
    }
    this.setHasLoad(true);
}
ScrollPage.prototype.handleFinally = function(){
    for(var fun in this.finally){
        this.finally[fun]();
    }
}
ScrollPage.prototype.handleError = function(){
    alert("加载出错");
}
//设置当前页
//查询
ScrollPage.prototype.execute = function(obj){
    $.ajax({
        url :obj.getUrl(),//ajaxUrl,
        type:"post",
        data : obj.getData(),
        dataType:obj.dataType,
        beforeSend:function(){
            //开始后打开loading效果
            if(!obj.getHasLoad()){
                return false;
            }
            obj.handleBefore();

        },
        success:function(data){
            obj.setResponseData(data);
            obj.handleAfter();
        },
        error:function(){
            obj.handleError();
        },
        complete:function(data){
            //结束后清掉loading效果
            obj.handleFinally();
        }
    });
};
分享到:
评论
4 楼 wahaha38 2014-09-25  
怎么填对应的参数呢
3 楼 wahaha38 2014-09-25  
这个具体要怎么用呢
2 楼 ljl_ss 2014-03-31  
无尘道长 写道
很感谢,用上了,不过发现2个问题:
1、每次翻页均会append一个loading的信息,我修正了一下:
原:this.addBefore(function(){ 
            $(obj.appendTarget).after(obj.loadingTarget); 
        });

修改后:this.addBefore(function(){ 
        if ( $(obj.loadingTarget).length == 0 ) {
        $(obj.appendTarget).after(obj.loadingTarget); 
        } else {
        $(obj.loadingTarget).show();
        }
        }); 

2、如果scrollTarget为window则67、68行无法取到scrollHeight和scrollTop的信息,当是实现窗口滚动分页时,可以把$(obj.scrollTarget)[0].scrollHeight换成:$("body")[0].scrollHeight,把$(obj.scrollTarget)[0].scrollTop换成 $("body")[0].scrollTop

嘿嘿。。。多谢指教,因为我们只测了chrome浏览器
1 楼 无尘道长 2014-01-18  
很感谢,用上了,不过发现2个问题:
1、每次翻页均会append一个loading的信息,我修正了一下:
原:this.addBefore(function(){ 
            $(obj.appendTarget).after(obj.loadingTarget); 
        });

修改后:this.addBefore(function(){ 
        if ( $(obj.loadingTarget).length == 0 ) {
        $(obj.appendTarget).after(obj.loadingTarget); 
        } else {
        $(obj.loadingTarget).show();
        }
        }); 

2、如果scrollTarget为window则67、68行无法取到scrollHeight和scrollTop的信息,当是实现窗口滚动分页时,可以把$(obj.scrollTarget)[0].scrollHeight换成:$("body")[0].scrollHeight,把$(obj.scrollTarget)[0].scrollTop换成 $("body")[0].scrollTop

相关推荐

    基于JavaScript实现表格滚动分页

    在现代网页开发中,表格是一种...总结来说,JavaScript滚动分页是一种高效且用户体验良好的分页方式,它可以让用户在滚动查看数据的同时,页面能自动加载更多数据,极大地提高了用户的操作便捷性和页面的数据展示效率。

    javascript读取json数组生成滚动分页

    在本场景中,我们将关注如何使用JavaScript从JSON数组中读取数据并生成滚动分页效果。滚动分页是一种用户滚动到页面底部时自动加载更多数据的技术,常见于社交网络和新闻网站。 首先,我们需要理解JSON(JavaScript...

    滚动分页,iscroll

    滚动分页是一种常见的网页设计技术,它允许用户在页面滚动到底部时自动加载更多内容,无需点击“下一页”按钮。这种技术对于提高用户体验、减少页面加载时间以及优化移动设备的浏览体验尤其重要。在本篇文章中,我们...

    页面滚动分页---iScroll实例:下拉刷新,滚动翻页

    在IT行业中,页面滚动分页是一种常见的网页优化技术,它能有效地提高用户体验,尤其是在处理大量数据或内容的网页上。这种技术通常与JavaScript库或框架相结合,如本例中的iScroll,来实现下拉刷新和自动滚动翻页...

    iscroll移动app滚动分页demo

    iscroll是由Matteo Spinelli开发的一个轻量级、高性能的JavaScript滚动库,适用于移动设备和桌面浏览器。它支持触摸事件,平滑滚动,以及诸如轮播、滚动条等高级特性。在移动应用中,iscroll常用于替代原生的滚动...

    基于javascript真分页

    JavaScript真分页是一种在网页上实现数据分页的技术,它允许用户通过点击或滚动来查看大量数据的不同部分,而无需一次性加载所有内容。这种技术在处理大数据集时尤其有用,可以提高网页性能,减少服务器压力,并提升...

    jquery node.js 滚动分页插件

    为了满足这些需求,滚动分页成为了一种流行的解决方案,特别是在数据量庞大的网站中。本教程将详细讲解如何使用jQuery和Node.js来实现一个滚动分页插件。 首先,jQuery是一个强大的JavaScript库,它简化了DOM操作、...

    javaScript分页

    JavaScript分页是网页开发中一个常见且重要的功能,它用于处理大量数据的显示,通过将数据分割成小块,逐页加载,提高了用户体验并优化了页面性能。在本项目中,我们将探讨如何使用纯JavaScript实现分页功能,以及...

    javascript 分页

    JavaScript 分页是网页开发中常见的需求,特别是在处理大量数据时,为了提高用户体验,避免一次性加载过多内容导致页面卡顿,通常会采用分页技术。在JavaScript中实现分页功能主要涉及以下几个关键知识点: 1. **...

    javascript分页实现

    JavaScript 分页实现是一种常见的网页交互功能,特别是在处理大量数据时,为了提高页面加载速度和用户体验,通常会将数据分批加载。在这个主题中,我们将深入探讨JavaScript如何实现分页功能,以及与Spring框架的...

    jQuery漂亮滚动分页示例插件(jPaginate)

    **jQuery漂亮滚动分页插件(jPaginate)详解** 在网页设计中,为了提供良好的用户体验,尤其是在处理大量数据时,滚动分页是一个不可或缺的功能。jQuery的jPaginate插件就是一个非常实用的工具,它能够帮助开发者创建...

    Iscroll滚动分页

    IScroll是由Matteo Spinelli开发的高性能JavaScript滚动库,它提供了一种优雅的方式来处理触摸滚动、鼠标滚轮滚动以及键盘导航,尤其是在处理大量数据和复杂布局时。本插件是基于IScroll 5.0.3版本进行封装,旨在...

    Js读取json数据实现滚动分页实例

    本实例将探讨如何使用JavaScript从JSON数据源中实现滚动分页功能。 首先,理解JSON(JavaScript Object Notation)是轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON数据通常以键值对的...

    可滚动分页算法发,始终显示第一页跟最后一页

    "可滚动分页算法"是为了解决这一问题而设计的一种策略,其核心目标是在用户滚动时始终保持第一页和最后一页可见,这样用户既能快速访问起始数据,又能便捷地跳转到末尾。以下是关于这种算法的详细解释: 1. **分页...

    javascript 分页模块

    JavaScript 分页模块是一种在网页中实现数据分页功能的技术,主要应用于大数据量的展示场景,如用户列表、文章列表等。这种模块通过将大量数据分割成小块(每块为一页),让用户能够逐页浏览,而不是一次性加载所有...

    移动端web滚动分页的实现方法

    因此,移动端Web滚动分页应运而生,作为一种新颖且高效的交互方式,它极大地改善了用户查看数据时的体验。本文将探讨移动端Web滚动分页的实现方法,并分析其带来的优点。 首先,我们来了解一下移动端Web滚动分页的...

    JS鼠标滚动分页效果示例

    JavaScript中的鼠标滚动分页是一种优化大量数据加载的技术,它避免了一次性加载所有数据导致页面加载缓慢的问题。在网页开发中,特别是在展示大量列表或表格数据时,分页尤为重要,因为它提高了用户体验,使得用户...

    js分页javascript分页

    JavaScript分页是网页开发中常用的一种技术,用于处理大量数据时,将数据分割成多个页面进行展示,提高用户体验。在不加载所有数据的情况下,只加载用户当前查看的部分,这样可以减少页面加载时间,提高页面性能。...

    10种JavaScript分页效果

    2. **无限滚动分页**: 也称为“滚动加载”或“懒加载”,这种分页方式会在用户滚动到页面底部时自动加载更多内容,提供无缝浏览体验。无限滚动可以减少页面加载时间,但可能对SEO不友好,因为搜索引擎无法抓取所有...

Global site tag (gtag.js) - Google Analytics