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()
}) //不用给延迟数,够用