JavaScript

超轻量级php框架startmvc

element的el-table中记录滚动条位置的示例代码

更新时间:2020-09-21 16:18:02 作者:startmvc
场景重现:在项目中使用了keep-alive来缓存组件,且使用element中的table列表,但在项目中是

场景重现:在项目中使用了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。