H5页面下拉加载更多(实用版)

近期在做一个H5网站,需要下拉加载更多产品列表的功能。百度搜索了好久,什么说法都有,什么插件都有。   醉了。基本上每一个能直接拿来用的。

最后发现:

1、dropload.js 插件  还可以,但是有个问题,只能单页使用比较方便。带有tab标签的不推荐使用。

2、自己百度了半天总结出来的一套:

<script>
    document.addEventListener(‘scroll‘, watchScroll);
    var itemIndex = 0;
    var classid = 10;
    var isloading = 0;//防止无限滚动加载
    var page = $("#page").val();//页码
    loadDataDynamic();//加载数据
    $(function () {
        $(‘.tab‘).bind(‘click‘, function () {// tab导航绑定点击事件
            document.body.scrollTop = 0;//首先复位顶部
            var $this = $(this);
            itemIndex = $this.index();
            $this.addClass(‘weui_bar_item_on c_f8‘).siblings(‘.tab‘).removeClass(‘weui_bar_item_on c_f8‘);//添加选中样式
            $(‘.itme‘).eq(itemIndex).show().siblings(‘.itme‘).hide(); //切换显示div
            classid = this.attributes.dataid.value;
            page = 1;//页数复位
            loadDataDynamic();
        });
    });

    //加载数据
    function loadDataDynamic() {
        //先显示正在加载中
        if ($("#loadingLi").length === 0)
            $(".itme:visible>ul").append("<p id=‘loadingLi‘ class=‘loading‘>正在加载...</p>");
        else {
            $("#loadingLi").text("正在加载...").removeClass("space");
        }
        var loadingLi = document.getElementById("loadingLi");

        var  msg = "";
        $.ajax({
            url: "/Handler/xxx.aspx?cmd=GetGameListByClass",
            type: "get",
            async:false,
            data: { classid: classid, page: page },
            dataType: "json",
            beforeSend: function () { isloading = 1; },
            success: function (data) {
                if (data.r) {
            //这边根据自己的展示需求来 修改一下。
                    if (page == "1") {
                        // 插入数据到页面
                        $(‘.itme:visible>ul‘).html(decodeURIComponent(data.r));
                        msg = "数据已加载到底了.";
                    } else {
                        $(‘.itme:visible>ul‘).append(decodeURIComponent(data.r));
                    }
                    $("#page").val(page++);
                    isloading = 0;
                } else {
                    $(".itme:visible>ul").scrollTop(document.body.scrollTop - 20);
                    if (page == 1) {
                        $(".itme:visible>ul").html("<div class=\"zwsj\" ><p>暂无数据</p></div>");
                    } else {
                        msg = "数据已加载到底了";
                    }
                }
                $(".itme:visible>ul").append(loadingLi);
            },
            error: function (xmlHttpRequest, textStatus, errorThrown) {
                msg = "数据加载失败!";
            }, complete: function () {
                if (page > 1) {
                    $("#loadingLi").text(msg);
                } else {
                    $("#loadingLi").text("");
                }
            }
        });
    }

    //如果滚动条滚动到页面底部,需要加载新的数据,并且显示加载提示
    function watchScroll() {
        if (!isScrollToPageBottom()) {
            return;
        }
        loadDataDynamic();
    }
    //作为一个对象的w和h属性返回视口的尺寸
    function getViewportSize(w) {
        //使用指定的窗口, 如果不带参数则使用当前窗口
        w = w || window;
        //除了IE8及更早的版本以外,其他浏览器都能用
        if (w.innerWidth != null)
            return { w: w.innerWidth, h: w.innerHeight };
        //对标准模式下的IE(或任意浏览器)
        var d = w.document;
        if (document.compatMode == "CSS1Compat")
            return { w: d.documentElement.clientWidth, h: d.documentElement.clientHeight };

        //对怪异模式下的浏览器
        return { w: d.body.clientWidth, h: d.body.clientHeight };
    }
    //检测滚动条是否滚动到页面底部
    function isScrollToPageBottom() {
        //文档高度
        var documentHeight = document.documentElement.offsetHeight;
        var viewPortHeight = getViewportSize().h;
        var scrollHeight = window.pageYOffset ||
            document.documentElement.scrollTop ||
                document.body.scrollTop || 0;

        return (documentHeight - viewPortHeight - scrollHeight < 20)&& isloading == 0;//这个蛮重要的
    }
</script>

写的有不足的地方可以指出来,后期优化。

效果图展示:  真实案例

参考来源 : http://www.cnblogs.com/w-wanglei/p/5863387.html

时间: 2024-08-01 07:22:32

H5页面下拉加载更多(实用版)的相关文章

H5 页面下拉加载更多

1.html页面: <body onload="index_roll()"> ... </body> 2.js <script type="application/javascript"> //获取滚动条当前的位置 function getScrollTop() { var scrollTop = 0; if (document.documentElement && document.documentElement

jQuery手机端上拉刷新下拉加载更多页面

<!doctype html> <html> <head> <title>jquery 手机端上拉刷新下拉加载更多页面</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta name="viewpost" content="width=device-wi

下拉加载更多DEMO(js实现)

项目的一个前端页面展示已购买商品时,要求能下拉加载更多.花了点时间研究这个功能,以前没做过. 首先需要给div加scroll事件,监听滚动条滚动动作.那何时触发加载动作呢?当滚动条滚到底的时候.如何判断滚动条滚到底呢? 当滚动条的高度加上滚动条到div顶部的高度等于div的可滚动高度时,说明滚动条到底部了.公式如下. [javascript] view plain copy this.scrollHeight <= $(this).scrollTop() + $(this).height() 给

ASP.NET仿新浪微博下拉加载更多数据瀑布流效果

闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前,先把实现的基本原理说一下.当夜幕下拉到底部的时候,js可以判断滚动条的位置,到达底部触发js方法,执行jquery的ajax方法,向后台一般处理程序夜幕ashx文件请求数据源,得到json格式的数据源.然后,遍历json数据源,拼接一个li标签,再填充到页面上去. 首先,我们来做个简单的html页面

常见开发需求之angular下拉加载更多

需求   移动端使用angular实现下拉加载更多的条目,这个需求比较常见,网上的插件改动起来比较麻烦,不如自己写一个最适合,以前有同事写了一个,bug太多,后来改分页了,我们产品说什么都让做,么办法,只能自己动手写一下,我的思路就是当页面第一次加载的时候我们先固定请求一部分数据进行显示,之后使用js探测垂直滚动条的滚动距离,当页面即将触底的时候发送第n+1请求,为防止在请求过程中重复请求加入了截流判断,其次在请求过程中页面最底部出现加载等待动画.如图所示 指令实现 // isBottom为防止

如何制作带有下拉刷新和下拉加载更多的列表

一般的APP软件都是需要下拉刷新,下拉加载这两个功能的,今天我们就来学习怎么样实现这两个功能. 我们先来讲一下他们的原理,这里我们将采取的方案是使用组合View的方式,先自定义一个布局继承自LinearLayout,然后在这个布局中加入下拉头和ListView这两个子元素,并让这两个子元素纵向排列.初始化的时候,让下拉头向上偏移出屏幕,这样我们看到的就只有ListView了.然后对ListView的touch事件进行监听,如果当前ListView已经滚动到顶部并且手指还在向下拉的话,那就将下拉头

iscroll.js实现上拉刷新,下拉加载更多,应用技巧项目实战

上拉刷新,下拉加载更多...仿原生的效果----iscroll是一款做滚动效果的插件,具体介绍我就不废话,看官方文档,我只写下我项目开发的一些用到的用法: (如果不好使,调试你的css,想必是个很蛋疼的问题,给点提示 :#wrapper,以及#scroller-content要注意) html如下: <div class="viewport"> <div id="wrapper" class="wrapper"> <

安卓,采用最简单易懂的方式实现上拉刷新下拉加载更多

<!-- Description:上拉刷新,下拉加载更多是现在最流行的手势操作,但是对于初学者来说,在实现上是有一定难度的, 网上很多教程讲的都过于复杂,对于初学者无法起到引导作用,特此写本文,帮助安卓新手入门理解此, 还有最为重要的一点:本文只帮助你理解,并不是想你成为代码搬运工!别被那么多代码吓到了, 其中很多都是注释,仔细看注释对你理解有很大的帮助 Author:Booker L Date:2014-05-16 --> 一,事先准备: 实现该功能,最基本的需要两个东西,一个是OnTouc

Windows Phone 8.1开发:如何让ListView下拉加载更多?

Windows Phone 8.1开发中使用ListView作为数据呈现载体时,经常需要一个下拉(拇指向上滑动)加载更多的交互操作.如何完成这一操作呢?下面为您阐述. 思路是这样的: 1.在ListView的loaded事件中,获取ListView中的ScrollView对象. 如何获得ScrollViewer,这篇文章说的很清楚! Windows Phone 8.1开发:如何从ListView中,获取ScrollViewer对象 2. 给ScrollViewer创建事件,上篇文章也说了. 3.