場景重現:在項目中使用了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>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持谷谷點程序。
轉載請注明:谷谷點程序 » element的el-table中記錄滾動條位置的示例代碼