vue3 antdesign table组件 内部数据 自动上下滑动实现

利用scroll相关属性和方法实现table内部数据自动滑动:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTo

dom.scrollTop 当前显示顶部位置和隐藏起来的顶部位置的偏移量

dom.scrollHeight 滚动区域完整的高度

dom.scrollBy({top,left,behavior}) 滚动函数 top:垂直滚动的距离 left 水平滚动的距离 behavior:滚动的过程:smooth/instant 平滑/直接

dom.scrollTo({top,left,behavior}) 滚动至函数 top:垂直滚动结束的位置 left 滚动结束的位置 behavior:同上

<BasicTable id="table" :scroll="{ y: 145 }"/>
    
import { ref, watch } from 'vue';
let tableTop = ref<number>(0); //记录当前滚动顶部的位置  便于监听
let table;

//延迟操作 防止组件未渲染获取空dom 建议放到axios的回调函数中
setTimeout(() => {
      //储存table内部dom 减少dom操作 
      table = document.querySelector('#table > div > div > div.ant-table-body');
      //滚动监听 初始向下滚动
      table.addEventListener('scroll', moveToBottom);
      //由于scollTo 的滚动速度存在未知性 所有这里选择用js去触发滚动到底部这个函数 这样可以让滚动缓慢
      table.scrollBy({
          top: 1,
          behavior: 'smooth',
      });
  }, 1000);

  //监听dom当前的位置 滚动到底部则向上滚动 滚动到顶部则向下滚动 注意需要先remove之前的监听函数
  watch(tableTop, (newTop, _) => {
    if (table.scrollHeight === newTop + 145) {
      table.removeEventListener('scroll', moveToBottom);
      table.addEventListener('scroll', moveToTop);
      table.scrollBy({
        top: -1,
        behavior: 'smooth',
      });
    } else if (newTop === 0) {
      table.removeEventListener('scroll', moveToTop);
      table.addEventListener('scroll', moveToBottom);
      table.scrollBy({
        top: 1,
        behavior: 'smooth',
      });
    }
  });

  //滚动至底部
  function moveToBottom() {
    //动态更新当前滚动的位置
    tableTop.value = table.scrollTop;
    table.scrollTo({
      top: table.scrollHeight - 145, //145为设置的滚动区域高度
      behavior: 'smooth',
    });
  }
  //滚动至顶部
  function moveToTop() {
    tableTop.value = table.scrollTop;
    table.scrollTo({
      top: 0,
      behavior: 'smooth',
    });
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值