div滚动到底部自动加载

重点:
一开始一直进不了滚动事件,最后发现是因为需要滚动元素的父元素没有设置overflow:hidden;记住了!!
如果不设置fixed的话,就要设置元素固定的高!!
css

        #contentBox {
            flex: 1;//父元素设置display:flex
            overflow: auto;
            margin-bottom: 20px;
/*          height:529px;*/
        }

html

        <div id="contentBox">
            <div id="schoolDeatl">

            </div>
            <div class="loadDiv" style="width: 100%; font-size: 15px; text-align: center; margin-top: 8px;">加载更多</div>
        </div>

js

var count = 5;//每次加载 请求的条数
var isLoad = true;//是否允许加载数据
$(function(){
 userScroll()
 loadScenePage()
})
//滚动条到底就加载
function userScroll() {
    $("#contentBox").scroll(function () {
        var nHeight = $(this).outerHeight();
        var nScrollHight = $(this)[0].scrollHeight;
        var nScrollTop = $(this)[0].scrollTop;
        if (nScrollHight - (nScrollTop + $(this).height()) < 130) {
            if (!isLoad) {
                return;
            }
            isLoad = false;
            //if (Number($("#pageIndex").val()) > Number($("input[name=PageAll]").last().val())) {
            if (Number($("#pageIndex").val()) > 2) {
                $("div[class=loadDiv]").text("已经没有更多数据");
                return;
            }
            loadScenePage();
        }
    });
}
//获取数据
function loadScenePage() {
    var param = getPara();
    $(".loadDiv").text("加载中...");
    isLoad = false;
    $.ajax({
        type: "POST",
        url: "/SceneManager/SceneSchool/FoodDistributionPage",
        data: {
            schoolName: param.schoolName,
            pageIndex: param.pageIndex,
            count: param.count,
            searchTime: param.date,
            platId: platId,
            schType: param.schType,
            BT: param.BT,
            sceneTypeName:"今日食材"
        },
        success: function (data) {
            $(".loadDiv").text("加载更多");
            //if ($("#pageIndex").val())
            $("#schoolDeatl").append(data);
            $("#pageIndex").val(Number($("#pageIndex").val()) + 1);
            if ($("#pageIndex").val() >= $("input[name=PageAll]").last().val()) {
                $("div[class=loadDiv]").text("已经没有更多数据");
            }
             //$("input[name=PageAll]").last().val()这个值是后台传给我的总页数
            isLoad = true;
        },
        error: function () {
            isLoad = true;
        }
    });
}
//获取参数(不重要,传给后台需要的参数而已)
function getPara() {
    var para = {};
    var schoolName = $("#schoolNameInput").val();
    var pageIndex = $("#pageIndex").val();
    var date = $("#endTime").val();
    para.schoolName = schoolName;
    para.pageIndex = pageIndex;
    para.count = count;
    para.date = date;
    para.schType = [];
    $("#school_C li").each(function (i, ele) {
        if ($(this).hasClass('C_active')) {
            var h = $(this).attr('value')
            para.schType.push(h)
        }
    });
    para.BT = [];
    $("input[name=jyname]:checked").each(function (i, ele) {
        para.BT.push(parseInt($(ele).val()));
    });
    return para;
}

这个只有我自己看得懂,因为这个是后台传了总共页数给我,而且内容是另一个文件引入的,直接$("#schoolDeatl").append(data);。
如果要改的话,看看获取数据那里能不能改成var html=""…

判断是否滚动的isLoad 问题,因为是先获取的数据再滚动
所以:首先isLoad =false;
获取数据的时候,设置了isload为true;
进入滚动事件时,如果isload=false跳出
继续往下走 再设置isload=false

一般情况:
可以首先设置isload=false;
进入滚动时:如果isload=true就跳出
if (isScrolling) {
return
}
继续往下走:设置isload=true;
是因为滚动事件会触发上千次事件,只执行一次就可以了,所以设置isload=true 事件只执行一次就行了,不再继续进入;
执行完事件之后,再恢复isload=false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值