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

转载于:https://www.cnblogs.com/longm/p/6846631.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值