Vue项目返回页面保持上次滚动状态方式

 更新时间:2025年04月28日 15:37:41   作者:trabecula_hj  
这篇文章主要介绍了Vue项目返回页面保持上次滚动状态方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Vue项目返回页面保持上次滚动状态

使用背景:

  • 首页-water-collection 当前页/列表页-water-collection-list
  • 当从列表页跳转详情页面后再返回列表页面需要保持在上次滚动状态
  • 每次从首页进入列表后都要滚动到顶部

一、设置列表页keepAlive缓存

{
        path: '/water-collection/list',
        name: 'water-collection-list',
        component: () =>
            import('@/views/water-collection/water-list.vue'),
        meta: { title: '概要情况',keepAlive:true }
}

二、第一次进入列表页面时在mounted生命周期中监听滚动事件

// mounted
this.$nextTick(() => {
      this.tableScorll = this.$refs.tableScorll;
      this.tableScorll.addEventListener("scroll", this.handleScroll);
});
// 滚动事件,记录滚动位置并赋值给scrollTop
 handleScroll() {
      this.scrollTop = this.tableScorll.scrollTop;
 },

三、第二次之后进入在activated生命周期中监听滚动事件

// activated
this.$nextTick(() => {
      this.tableScorll = this.$refs.tableScorll;
      this.tableScorll.addEventListener("scroll", this.handleScroll);
});

四、beforeRouteEnter判断是进入页面还是返回页面

1. 路由判断

beforeRouteEnter(to, from, next) {
    next((vm) => {
      if (from.name === "water-collection") {
        vm.isBack = false;
      } else {
        vm.isBack = true;
      }
    });
},

2. 返回页面滚动到上次位置,进入页面则滚动到顶部位置

// activated
if (this.isBack) {
      if (this.scrollTop > 0) {
        this.tableScorll.scrollTo(0, this.scrollTop);
      }
    } else {
      this.scrollTop = 0;
      this.tableScorll&&this.tableScorll.scrollTo(0, 0);
}

3. 离开页面清除滚动事件监听

deactivated() {
    this.tableScorll.removeEventListener("scroll", this.handleScroll);
},

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue大屏自适应的实现方法(cv就能用)

    vue大屏自适应的实现方法(cv就能用)

    最近在用VUE写大屏页面,遇到屏幕自适应问题,下面这篇文章主要给大家介绍了关于vue大屏自适应的实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 对vue v-if v-else-if v-else 的简单使用详解

    对vue v-if v-else-if v-else 的简单使用详解

    今天小编就为大家分享一篇对vue v-if v-else-if v-else 的简单使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • cesium开发之如何在vue项目中使用cesium,使用离线地图资源

    cesium开发之如何在vue项目中使用cesium,使用离线地图资源

    这篇文章主要介绍了cesium开发之如何在vue项目中使用cesium,使用离线地图资源问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue安装与使用

    Vue安装与使用

    Vue是一套用于构建前后端分离的框架。刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球“最”流行的前端框架。使用vue开发网页很简单,并且技术生态环境完善,社区活跃,是前后端找工作必备技能!下面来看看其得安装及使用方法吧
    2021-10-10
  • 详解Vue实现直播功能

    详解Vue实现直播功能

    这篇文章主要介绍了Vue实现直播功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • 详解基于Vue的支持数据双向绑定的select组件

    详解基于Vue的支持数据双向绑定的select组件

    这篇文章主要介绍了详解基于Vue的支持数据双向绑定的select组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • vue js秒转天数小时分钟秒的实例代码

    vue js秒转天数小时分钟秒的实例代码

    这篇文章主要介绍了vue js秒转天数小时分钟秒的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • vue element el-select下拉滚动加载的方法

    vue element el-select下拉滚动加载的方法

    很多朋友都遇到这样一个问题在使用vue+element的el-select下拉框加载返回数据太多时,会造成卡顿,用户体验欠佳,这篇文章主要介绍了vue element el-select下拉滚动加载方法,需要的朋友可以参考下
    2022-11-11
  • vue配置根目录详细步骤(用@代表src目录)

    vue配置根目录详细步骤(用@代表src目录)

    vue用@表示src文件夹,引入时找文件路径更方便,下面这篇文章主要给大家介绍了关于vue配置根目录(用@代表src目录)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • VUE在for循环里面根据内容值动态的加入class值的方法

    VUE在for循环里面根据内容值动态的加入class值的方法

    这篇文章主要介绍了VUE在for循环里面根据内容值动态的加入class值的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08

最新评论