学无先后,达者为师

网站首页 编程语言 正文

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

作者:丶扁扁的糖是扁的 更新时间: 2022-01-19 编程语言

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 决定了该函数是保存位置还是跳转位置
     * @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()
}) //不用给延迟数,够用

原文链接:https://blog.csdn.net/sugerinaflat/article/details/121822434

栏目分类
最近更新