vue3+elementPlus实现el-table监听触底加载

方法一: 

<el-table class="scrollTable"></el-table>

import {
  ref,
  reactive,
  defineProps,
  onMounted,
  onUnmounted,
  defineEmits,
} from "vue";

const scrollTableDom = ref("");

onMounted(() => {
  scrollTableDom.value = document.querySelector(
    ".scrollTable .el-table__body-wrapper .el-scrollbar__wrap"
  );
  scrollTableDom.value.addEventListener("scroll", handleTableScroll);
});
onUnmounted(() => {
  scrollTableDom.value.removeEventListener("scroll", handleTableScroll);
});


const handleTableScroll = (event) => {
  const table = event.target;
  const scrollPosition =
    table.scrollHeight - table.scrollTop - table.clientHeight;
  if (scrollPosition <= 5) {
    loadMoreData();
  }
};

方法二:

<el-table ref="TableRef"></el-table>

import {
  ref,
  reactive,
  getCurrentInstance,
  defineProps,
  watch,
  onMounted,
  defineEmits,
  onUnmounted,
} from "vue";

onMounted(() => {
  // 挂载
  TableRef.value &&
    TableRef.value.$refs.bodyWrapper.addEventListener(
      "mousewheel",
      scrollBehavior
    );
});

onUnmounted(() => {
  // 卸载
  TableRef.value &&
    TableRef.value.$refs.bodyWrapper.removeEventListener(
      "mousewheel",
      scrollBehavior
    );
});

// 滚动行为
function scrollBehavior(e) {
  // 滚动方向判定
  const scrollDirection = e.deltaY > 0 ? "down" : "up";
  if (scrollDirection === "down") {
    // 获取提供实际滚动的容器
    const dom =
      TableRef.value.$refs.bodyWrapper.getElementsByClassName(
        "el-scrollbar__wrap"
      )[0];
    const { clientHeight, scrollTop, scrollHeight } = dom;
    console.log(clientHeight + scrollTop, scrollHeight);
    // 父容器高度 + 子容器距离父容器顶端的高度 = 子容器可滚动的高度
    if (scrollHeight - (clientHeight + scrollTop) <= 200) {
      console.log("竖向滚动条已经滚动到底部");
    }
  }
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值