vue el-table表格数据,不分页,鼠标滚动实现数据懒加载
当前有一个需求,页面不分页,又想在一页显示全部数据,这个时候其实就可以用数据懒加载。随鼠标滚动到滚动条末尾,自动加载下一页的数据。create的时候默认加载20条数据这里差不多到末端了鼠标滑到末端后,触发加载第二页数据代码实现:先定义个table (getPageBodyHeight 方法是我通过页面自适应监听页面宽高变化,之前帖子有栗子,计算table的高度,简单点的可以自己设置固定高度)<
·
当前有一个需求,页面不分页,又想在一页显示全部数据,这个时候其实就可以用数据懒加载。
随鼠标滚动到滚动条末尾,自动加载下一页的数据。created的时候默认加载20条数据。
这里差不多到末端了
鼠标滑到末端后,触发加载第二页数据
代码实现:
先定义个table (getPageBodyHeight 方法是我通过页面自适应监听页面宽高变化,之前帖子有栗子,计算table的高度,简单点的可以自己设置固定高度)
<el-table border
v-loading="loading"
:data="tableData"
:row-key="getRowKeys"
:height="getPageBodyHeight">
<el-table-column type="selection" :reserve-selection="true" width="50"></el-table-column>
<el-table-column prop="cla" :label="$t('列1')" show-overflow-tooltip></el-table-column>
<el-table-column prop="clb" :label="$t('列2')" show-overflow-tooltip></el-table-column>
<el-table-column prop="clc" :label="$t('列3')" show-overflow-tooltip></el-table-column>
<el-table-column prop="cld" :label="$t('列4')" show-overflow-tooltip></el-table-column>
<el-table-column prop="cle" :label="$t('列5')" show-overflow-tooltip></el-table-column>
<el-table-column prop="clf" :label="$t('列6')" show-overflow-tooltip></el-table-column>
</el-table>
栗子中主要用到的几个变量
data() {
return {
loading: false,
tableData: [],
pagination: {
page: 1,
pageSize: 20,
total: 0,
},
totalPage: 5,
countTotal: 20,
selectedIds:[],
checked:false,
otherHeight:0,
pageHeight:0,
}
},
creatde中模拟默认查询20条数据
created() {
//this.defaultDataTime();
//this.search();
this.tableData = []
for (let i = 1; i <=this.countTotal ; i++) {
this.tableData.push({"cla": "cla-"+i,"clb": "clb-"+i,"clc": "clc-"+i})
}
},
重点:在mounted中设置监听鼠标滚动事件
mounted() {
//this.watchSize();
this.lazyLoading();
},
lazyLoading(){
let dom = document.querySelector(".el-table__body-wrapper");
dom.addEventListener("scroll", (v) => {
const scrollDistance = dom.scrollHeight - dom.scrollTop - dom.clientHeight;
console.log("鼠标滑动-scrollDistance",scrollDistance)
// if (scrollDistance <= 0) { //分辨率问题,如果设置 100% ,滑倒最底部,scrollDistance的值 可能为 0.201 到 -0.201
if (scrollDistance <= 1) {
//等于0证明已经到底,可以请求接口
if (this.pagination.page >= this.totalPage) {
//判断是否到达底部
// this.$message.warning("我~是有底线的 (~ ̄▽ ̄)~");
console.log("我~是有底线的 (~ ̄▽ ̄)~")
}
if (this.pagination.page < this.totalPage) {
//当前页数小于总页数就请求
this.pagination.page ++; //当前页数自增
console.log("页面已经到达底部,可以请求接口,请求第 "+ this.pagination.page + " 页数据");
var cIndex = this.countTotal + 10 ;
for (let i = (this.countTotal + 1) ; i <= cIndex ; i++) {
this.tableData.push({"cla": "cla-"+i,"clb": "clb-"+i,"clc": "clc-"+i})
}
this.countTotal += 10 ;
//this.getData();
// this.append();
}
}
});
},
更多推荐
已为社区贡献11条内容
所有评论(0)