2019-06-29点击标题之后进行滚动加载的问题

当点击每一个div会往后端发送数据,每一次出现十条,当滚动向下的时候再加载剩下的

<div>全部</div>
<div>演唱会</div>
<div>音乐会</div>
<div>话剧歌剧</div>
<div>儿童亲子</div>
<div>音乐剧</div>
<div>戏曲综艺</div>
<div>展览</div>
<div>舞蹈芭蕾</div>
//以下是对主要演出信息发起数据的全局变量
var clickFlag = {//给每一个标题都设置一个开关
    0: true,
    1: true,
    2: true,
    3: true,
    4: true,
    5: true,
    6: true,
    7: true,
    8: true
};
var scrollTitFlag = {//给每一个滚动的标题设置一个开关
    0: true,
    1: true,
    2: true,
    3: true,
    4: true,
    5: true,
    6: true,
    7: true,
    8: true
}
var curId;//当前点击的id
var lastId;//上一次点击的id
var page = 0;//滚动加载的页数
var scrollFlag = true;//滚动加载的开关
var arrObj = {};//存储每一次发起Ajax的数据
//封装Ajax函数
function ajax(url, data, fun) {
    $.ajax({
        type: "get",
        url: url,
        data: data,
        dataType: "json",
        success: function (data) {
            fun(data);
        }
    })
}
//封装ejs渲染数据的函数
function ejsFun(data) {
    var html = ejs.render($("#show").html(), { data: data });
    $(".main ul").html(html)
}
//封装让ul和加载图片出现或消失的函数
function ImgUlForm(imgForm, ulForm) {
    $(".loading img").css("display", imgForm);
    $(".main ul").css("display", ulForm);
}
//封装第一次发送Ajax的发送函数
function firstSendAjax() {
    ajax("./api/show.php", "classifyId=" + curId + "&page=0", function (data) {
        ImgUlForm("none", "block")//让ul和加载图片出现或消失的函数
        arrObj[curId] = data.data;//把数据存到相对应这个标题的数组中
        ejsFun(arrObj[curId]);//ejs渲染
        lastId = curId;//本次点击的id变成上一次的
    })
}
//当点击导航栏的时候出现的效果
function clickFun() {
    $("nav .nav-box div").click(function () {
        ImgUlForm("block", "none")//让ul和加载图片出现或消失的函数
        //获取data-id的值
        curId = $(this).data("id");//当前点击的id
        localStorage.id = curId;//每次点击都把本地存储的id变成当前点击的id
        if (curId != lastId) {//如果点击的是不同的标题再把page初始化,开关打开,如果是相同的标题滚动就不再发起Ajax
            page = 0;
            scrollFlag = true;//每次点击就要把page变为0,滚动的开关打开
        }
        if (clickFlag[curId]) {//点击的时候先看看开关,如果开着就说明是第一次点击
            clickFlag[curId] = false;//只要进来。就把相对应的标题的开关关上,以后再点击就不发起Ajax
            //如果是第一次点击发送Ajax,往后点击不再发送
            firstSendAjax();
            $(".loading a").css("display","none");//每次第一次点击都让没有更多了这几个字消失
        } else {//如果不是第一次点击,就直接把之前存入这个标题相对应的数组中的数据拿出来
            ImgUlForm("none", "block")//让ul和加载图片出现或消失的函数
            ejsFun(arrObj[curId]);//ejs渲染
        }
        $(this).addClass("active").siblings().removeClass("active");
    })
}
clickFun();
//当滚动的时候加载的函数
function scrollLoad() {
    //当滚动的时候加载
    var offsetTop = $(".main")[0].offsetTop;
    var windowH = $(window).height();
    window.addEventListener("scroll", function () {
        //当页面向下拉的时候出现懒加载
        var scrollTop = $(window).scrollTop();
        var height = $(".main").height();
        if (scrollTop + windowH >= offsetTop + height) {
            if (scrollFlag && scrollTitFlag[curId]) {//只有滚动开关和当前标题的滚动开关都打开才发起请求
                $(".loading img").css("display", "block").siblings().css("display", "none");//图片出现,文字消失
                scrollFlag = false;//只要进来就把开关关上,以防新的内容还没有渲染就再次发起Ajax请求
                page++;
                ajax("./api/show.php", "classifyId=" + curId + "&page=" + page, function (data) {
                    if (data.status) {
                        data.data.forEach(function (item) {
                            arrObj[curId].push(item);
                        })//把得到的数据每一位都添加到相对应的数组中
                        ejsFun(arrObj[curId]);//ejs渲染
                        scrollFlag = true;
                    } else {
                        scrollTitFlag[curId] = false;//当没有数据的时候就把这个标题的滚动开关关上,再次点击这个标题的时候就不再滚动加载
                        $(".loading a").css("display", "block").siblings().css("display", "none");//文字出现,图片消失
                    }
                })
            }
        }
    }, false)
}
scrollLoad();

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,879评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,163评论 1 32
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,845评论 1 92
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,217评论 2 19
  • 小Q自己的公司成立两周年纪念日这天,也是她与老公王先生相识十周年的纪念日。结束庆祝晚会后,不按常理出牌的小Q丢下老...
    蓝戒子阅读 314评论 0 2