vue3+ts+element ui puls,顶部循环展示卡片,底部展示表格,定时请求接口更新数据,解决把页面下拉到底部后,更新数据后页面自动回到顶部问题
时间: 2024-09-10 21:11:54 浏览: 132
在使用Vue 3结合TypeScript和Element Plus框架开发时,如果你的页面包含了顶部循环展示卡片和底部表格展示数据,并且你使用定时器请求接口更新数据,可能会遇到一个问题:当数据更新后,页面会自动滚动到顶部。这个问题主要是因为当数据更新时,整个页面或者部分DOM元素发生了重新渲染,导致浏览器将滚动条重置到顶部。
为了解决这个问题,可以采取以下几种策略:
1. **使用滚动位置存储**:在组件中维护一个变量来存储表格当前的滚动位置。在每次数据更新时,可以先将滚动位置保存下来,然后在数据更新和DOM重新渲染完成后,再将滚动位置设置回去。
2. **使用Element Plus的虚拟滚动**:如果表格数据量较大,可以使用Element Plus提供的`<el-table>`的虚拟滚动功能(virtual-scroll),这样可以提高渲染性能,减少页面滚动到顶部的情况。
3. **手动控制滚动位置**:在数据更新前,使用`window.scrollTo`或者`element.scrollIntoView`等方法来手动控制滚动位置。确保在数据更新前保存当前滚动位置,并在数据更新后恢复滚动位置。
以下是一个简单的代码示例:
```typescript
<template>
<div>
<!-- 卡片部分 -->
<div v-for="card in cards" :key="card.id" class="card">
<!-- 卡片内容 -->
</div>
<!-- 表格部分 -->
<el-table :data="tableData" style="height: 600px;">
<!-- 表格列 -->
</el-table>
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
const tableData = ref([]);
const scrollPosition = ref(0); // 用于存储滚动位置
const fetchData = () => {
// 获取数据的函数
};
// 定时器定期获取数据并更新表格
setInterval(() => {
fetchData().then(() => {
// 更新表格数据
tableData.value = /* 新获取的数据 */;
// 恢复滚动位置
window.scrollTo(0, scrollPosition.value);
});
}, 5000); // 每5秒请求一次数据
// 监听表格滚动事件,保存当前滚动位置
watch(tableData, () => {
scrollPosition.value = window.pageYOffset || document.documentElement.scrollTop;
});
// 初始化数据
fetchData();
return {
tableData,
// 其他需要的响应式数据或方法
};
}
});
</script>
<style>
/* 页面样式 */
</style>
```
阅读全文