keep-alive保持页面位置

在vue单页面应用中,可以通过在router 配置中添加 keepAlive 来keepAlive页面,但是这样会导致页面在切换时,页面位置会回到顶部,这样用户体验不好,所以需要保持页面位置。

解决方案

  1. 在router配置中添加keepAlive
  2. 在需要保持页面位置的组件中添加scrollTop属性
  3. 在组件的activated钩子函数中获取scrollTop,并恢复滚动位置
  4. 在组件的beforeRouteLeave钩子函数中设置scrollTop

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// router配置
{
path: '/list',
name: 'list',
component: List,
meta: {
keepAlive: true
}
}

// List组件
export default {
data() {
return {
scrollTop: 0
}
},
activated() {
// 恢复滚动位置
this.$nextTick(() => {
const pages = document.querySelector('.page');
if (pages) {
pages.scrollTop = this.scrollTop;
}
});
},
beforeRouteLeave(to, from, next) {
// 保留滚动位置
this.scrollTop = document.querySelector('.page')?.scrollTop;
next();
},
}

keep-alive保持页面位置
https://peterzhanghui.github.io/2025/04/02/keep-alive保持页面位置/
作者
前端嘉嘉
发布于
2025年4月2日
许可协议