js实现滚轮滑动到底部自动加载

这里我们用vue实现(原生js相似),

这里我们用一个div当作一个容器;

复制代码
<div class="JL" @scroll="onScroll" ref="inin">

        <div v-for="(item,index) in this.list" :key="index" >

                .....

        </div>

</div>



data(){

        return{
                //展示数据

                list:[],
                //是否正在加载
                isLoading:false,
                //是否无数据可加载
                isNoMore:false,
                page:""

        }

}

css样式

给上面div添加一个高度

复制代码
.JL{

        height:200px;

        //自动生成滚动条

        overflow:auto;

}

在methods中编写我们的滚动条方法

onScroll(){

// let innerHeight=document.querySelector("JL").clientHeight //js中使用

//let scrollHeight=document.querySelector("JL").scrollHeight //js中使用

//let scrollTop=document.querySelector("JL").scrollTop //js中使用

//因为我们用的时vue 不建议直接操作dom所以我们使用ref来获取虚拟dom

let innerHeight=this.$refs.inin.clientHeight //可视框高度

let scrollHeight=this.$refs.inin.scrollHeight //滚动框长度

let scrollTop=this.$refs.inin.scrollTop //滚动条滚动高度

//我们使用接近底部就获取数据

//因为我们滚轮事件会执行多次,所以我们添加判断让他一次只执行一次

if(scrollHeight-30=scrollTop+innerHeight&&!isLoading&&!isNoMore){

this.page++;//每次请求页码加一,从二开始,因为我们进来界面已经请求过一个了

//获取请求,得到一个list2

this.isLoading=true

//此时的data传递的就是正常查询需要的参数,以及分页的页码和数量

(注意第一次请求得到的数据条数要足以撑开div生成滚动条,不然滚动条事件触发不了)

axios.post(url,data,()=>{

。。。

var list2=请求得到的数据

//判断是否还有数据

if(list2.length<1){

//此时说明数据库数据已经读取完毕,不在请求

this.isNoMore=true;

}

this.list=[...this.list,...list2]//将得到的数据拼接到原来的list

this.isLoading=false

})

}

}

//以上就是前端需要的处理

//简单说一下后端

我们只需做一个分页通过sql limit 或者spring里面的PageInfo进行分页

又因为此时移动端做下滑加载 就不需要分页的一些page进行页面跳转,所以我们只需要从后端返回查询到的list

如果用的pageInfo会得到一个PageInfo的对象,我们只需要通过getList()方法只返回数据列表就行

相关推荐
一叶难遮天3 分钟前
开启RN之旅——前端基础
前端·javascript·promise·js基础·es6/ts·npm/nrm
好学且牛逼的马10 分钟前
【SSM框架 | day25 spring IOC 与 DI 注解开发】
java·开发语言
BetterChinglish20 分钟前
html5中canvas图形变换transform、setTransform原理(变换矩阵)
javascript·html5·canvas·变换矩阵
是你的小橘呀29 分钟前
深入解析 JavaScript 引擎与作用域机制
前端·javascript
_OP_CHEN40 分钟前
C++进阶:(四)set系列容器的全面指南
开发语言·c++·stl·set·multiset·关联式容器·setoj题
不惑_42 分钟前
Java 使用 FileOutputStream 写 Excel 文件不落盘?
开发语言·python
十五年专注C++开发42 分钟前
Qt-VLC: 一个集成VLC的开源跨平台媒体播放库
开发语言·qt·媒体·libvlc·vlc-qt
风止何安啊1 小时前
深入 V8 引擎:JavaScript 执行机制与作用域模型的底层逻辑解析
javascript
你算哪颗溜溜梅1 小时前
uni.scanCode vs MpaasScan:支付宝扫码识别赢麻了,保姆级教程来咯~
javascript·uni-app
羽沢311 小时前
Vue3组件间通信——pinia
前端·javascript·vue.js