vue+element-UI实现跟随滚动条加载表格数据
el-table当数据量大的时候,实现滚动到底部后加载数据,直接上js代码,有其他需求请各自更改
第一步、在data中定义两个数组
data() {
return {
innerList:[], //新数组,用于存放全部数据
innerData:[], //el-table表格数组
dom:null,
}
}
第二步、在数据发生改变的方法中先循环存放一部分数据用于页面显示
watch: {
data:{
this.innerData=[];
this.innerList=[];
//将接口中获取到的数据全部存放到数组
this.innerList = this.data.records || this.data.data || [];
//先循环出100条数据用于显示
for(let i=0;i<this.innerList.length;i++){
if(i<100){
this.innerData.push(this.innerList[i]);
}
}
}
}
第三步、在mounted监听滚动事件
mounted() {
// 设置滚动条监听时间加载数据
this.dom = this.$refs.elTable.bodyWrapper;
this.dom.addEventListener('scroll', () => {
let scrollTop = this.dom.scrollTop; //滚动距离
let scrollHeight = this.dom.scrollHeight; //滚动条的总高度
let clientHeight = this.dom.clientHeight; //可视区的高度
if (scrollTop + clientHeight === scrollHeight) {
if (this.innerList.length <= this.innerData.length) return
if (this.innerData.length + 50 > this.innerList.length) {
// 如果不够50条就全部渲染上去
this.dom.scrollTop = this.dom.scrollTop - 50;
this.innerData=[];
this.innerData.push(...this.innerList)
} else {
this.dom.scrollTop = this.dom.scrollTop - 50;
let id = this.innerData.length;
//每次渲染50条数据
for (let index = id; index < id + 50; index++) {
this.innerData.push(this.innerList[index])
}
}
}
})
}