element的eltable中记录滚动条位置

38次阅读

共计 1110 个字符,预计需要花费 3 分钟才能阅读完成。

场景重现:在项目中使用了 keep-alive 来缓存组件,且使用 element 中的 table 列表,但在项目中是对 table 进行了二次封装,跟页码合在了一起。按照网上的直接对 scrollTop 赋值,赋值失败了,还要加上 setTimeout 才能成功,虽然实现了功能,但是不知道原因,可以的话希望有人能解答。

废话少说,直接赋上代码。

<template>
  <div class="table">
    <el-table ref="table">
    ...
    </el-table>
    <wp-pager @page-change="pageChange" :total="total" v-if="pager" v-bind="$attrs" v-on="$listeners"></wp-pager>
  </div>

</template>
<script>
  import {WpPager} from '../pager'

  export default {data() {
      return {scrollTop: null}
    },
    activated() {this.saveScroll()
    },
    mounted() {
     
    // 监听滚动条的位置  
    this.$refs.table.bodyWrapper.addEventListener('scroll', (res) => {
        let height = res.target
        this.scrollTop = height.scrollTop
      },false)
    },

    beforeDestroy() {this.$refs.table.bodyWrapper.removeEventListener('scroll', (res) => {
        let height = res.target
        this.scrollTop = height.scrollTop
      },false)
    },
    
    methods: {
    // 当页码改变的时候滚动条重新到顶部
      pageChange (page) {this.$emit('page-change', page)
        this.scrollTop = 0
        this.saveScroll()},

// 这里如果直接赋值给 this.$el.querySelector('.el-table__body-wrapper').scrollTop 会失效,需要加上 setTimeout 才行。saveScroll() {this.$nextTick(()=> {setTimeout(() => {var scrollTop = this.$el.querySelector('.el-table__body-wrapper')
          scrollTop.scrollTop = this.scrollTop
          }, 13)
        })
      }
    }
  }
</script>

正文完
 0