Vue3+elementplus
想要获取el-table的滚动条距离顶部的距离来实现活到表格底部时自动加载下一页数据
目前根据下方的代码无法获取到scrollTop,检查问题发现scroll添加的addEventListener无效,滚动发现不会打印123
想知道是为什么以及解决方法是啥
<template>
<br/>
<br/>
<br/>
<el-table ref="tableRef" :data="tableData" height="300" scrollbar-always-on>
<!-- 表格列定义 -->
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
</el-table>
<div>滚动距离顶部:{{ scrollTopDistance }}px</div>
</template>
<script>
import { ref, onMounted, onBeforeUnmount,nextTick } from 'vue';
export default {
setup() {
const tableRef = ref(null); // 引用 el-table 组件实例
const scrollTopDistance = ref(0); // 存储滚动距离
let scrollBody = null; // 保存滚动容器元素
const handleScroll = (event) => {
console.log("123")
scrollTopDistance.value = event.target.scrollTop;
};
onMounted(() => {
// 确保组件已渲染,获取滚动容器
// if (tableRef.value) {
// // scrollBody = tableRef.value.$el.querySelector('.el-table__body-wrapper');
// scrollBody = tableRef.value.$refs.bodyWrapper;
// console.log(scrollBody)
// if (scrollBody) {
// scrollBody.addEventListener('scroll', handleScroll);
// }
// }
nextTick(() => {
const scrollableEl = tableRef.value.$el.querySelector('.el-table__body-wrapper');
if (scrollableEl) {
scrollableEl.addEventListener('scroll', handleScroll);
}
});
});
onBeforeUnmount(() => {
// 组件卸载时移除监听
if (scrollBody) {
scrollBody.removeEventListener('scroll', handleScroll);
}
});
return {
tableRef,
scrollTopDistance,
tableData: [{"name":"张三","age":18},{"name":"李四","age":20},{"name":"王五","age":22},
{"name":"张三","age":18},{"name":"李四","age":20},{"name":"王五","age":22},
{"name":"张三","age":18},{"name":"李四","age":20},{"name":"王五","age":22},]
};
}
};
</script>
<style scoped>
.el-table__body-wrapper {
overflow-y: auto !important;
}
</style>