页面滚动加载加锁

页面滚动加载加锁

什么是页面滚动加载?

当你把页面滑动到最低端时候,HTTP再次触发请求,每一次触发请求就可以简单地请求几十条,以此往复循环。

优势:不用一下子把数据全部请求,以免造成数据请求数量太多,导致页面加载时间长,从而容易浏览页面的人容易烦躁。

 // 页面滚动
        var page = 1;
         // 页面滚动
         //当浏览者拖动滚动条的时 滑动 滚动时触发
        window.onscroll = function () {
        //顶部高度
            var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
           //窗口高度
            var Height = window.innerHeight;
            //页面高度
            var pageHeight = document.body.offsetHeight || document.documentElement.offsetHeight;
           // 如果顶部高度加窗口高度>=页面高度,也就是说页面滑动到底部,这时候,就要请求新的数据
            if (Height + scrollTop >= pageHeight) {
               //page监测是第几页
                page++;
                //请求数据,并把数据放到res里
                axios.get("http://localhost:9090/artist/artistInfo?category=" + x + "&pn=" + page + "&rn=24&prefix=" + shuzu[y]).then(res => {
                //下面是对请求到的数据进行的一些操作,不用在意这些细节
                    var arr = res.data.artistList;
                    arr.forEach(item => {
                        str = str +
                            ` <li>
                        <img src="${item.pic300}" alt="">
                        <h3>${item.name}</h3>
                        <p>粉丝量:${item.artistFans}</p>
                            </li>
                            `
                    })
                })
            }
        }

以上可以很好地解决请求数据过慢的问题

但是也容易造成新的问题——就是没有设置加锁,导致滑动到底部,一下子请求多条数据(如下图)

在这里插入图片描述

可以看到数据是一下子出现4条,也就是滑动到底部就立刻请求了4次,因此要对这个页面滚动加载加

锁,让它每次仅仅请求一次数据。

   var page = 1;
        // 初始值为真
        var flag = true;
          // 页面滚动
         //当浏览者拖动滚动条的时 滑动 滚动时触发
        window.onscroll = function () {
          //顶部高度
            var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
             //窗口高度
            var Height = window.innerHeight;
              //页面高度
            var pageHeight = document.body.offsetHeight || document.documentElement.offsetHeight;
              // 如果顶部高度加窗口高度>=页面高度,也就是说页面滑动到底部,这时候,就要请求新的数据
            if (Height + scrollTop >= pageHeight) {
                //发现页面滑动到底部
                if (flag) {
                    //  进入后,进行加锁,一同请求的其他数据就无法进入在这里插入图片描述

                    flag = false;
                     //page监测是第几页
                    page++;
                      //请求数据,并把数据放到res里
                    axios.get("http://localhost:9090/artist/artistInfo?category=" + x + "&pn=" + page + "&rn=24&prefix=" + shuzu[y]).then(res => {
                     //下面是对请求到的数据进行的一些操作,不用在意这些细节
                        var arr = res.data.artistList;
                        //请求到数据,解锁
                        flag = true;
                        
                        arr.forEach(item => {
                            str = str +
                                ` <li>
                        <img src="${item.pic300}" alt="">
                        <h3>${item.name}</h3></li> `
                        })
                    })
                }
            }
        }

如下图,现在就仅能一条一条的请求

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值