el-table 定位 跳转 至指定 行 位置,保证数据更新后位置不变

22 篇文章 1 订阅

el-table数据刷新后会重新定位至表格头的位置,想要更新数据后任处于之前操作的位置,就要在操作时记录下当前表格滚动条的位置,数据更新后设置表格位置为刚才记忆的位置。

记忆上次位置:

     /**
     * @description: 获取表格滚动条位置
     * @param ifMemory 有没有ifMemory决定了该函数是保存位置还是跳转位置
     * @return void
     */
    getTableScrollTop( ifMemory = false ) {
      if ( !this.$refs['elTable'] ) return //不存在这个表格则返回
      let elTable = this.$refs['elTable'].$el
      if ( !elTable ) return
      const scrollParent = elTable.querySelector('.el-table__body-wrapper')
      if ( ifMemory ) {
        //保存
        this.memoryScrollTop = scrollParent.scrollTop //存下当前编辑行的ScrollTop
      } else {
        //跳转
        scrollParent.scrollTop = this.memoryScrollTop //跳转到存下编辑行的ScrollTop
      }
    },

使操作行定位至表格最上方:

     /**
     * @description: 获取表格滚动条位置
     * @param index 有没有 index 决定了该函数是保存位置还是跳转位置,index是行在表格中的位置
     * @return void
     */
    getTableScrollTop( index ) {
      if (!this.$refs['elTable']) return //不存在这个表格则返回
      let elTable = this.$refs['elTable'].$el
      if ( !elTable ) return
      const scrollParent = elTable.querySelector('.el-table__body-wrapper')
      const targetTop = elTable.querySelectorAll('.el-table__body tr')[index].getBoundingClientRect().top //该行的位置
      const containerTop = elTable.querySelector('.el-table__body').getBoundingClientRect().top //body的位置
      if (index) {
        //保存
        this.memoryScrollTop = targetTop - containerTop //存下该行处于最上方的ScrollTop
      } else {
        //跳转
        scrollParent.scrollTop = this.memoryScrollTop //跳转到存下编辑行的ScrollTop
      }
    },

 表格更新后不能立即调用该函数设置表格滚动条位置,但是借助延时函数可以解决这个问题,甚至不需要设置延时数

setTimeout(() => {
    this.getTableScrollTop()
}) //不用给延迟数,够用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值