参考:https://blog.csdn.net/qq_40204835/article/details/79853685

方法一: 利用Keep-Alive和监听器

1.首先在路由中引入需要的模块

{
path: ‘/scrollDemo’,
name: ‘scrollDemo’,
meta: {
keepAlive: true // 需要缓存
},
component: resolve => { require([‘../view/scrollDemo.vue’],
resolve) }
}

2.在App.vue中设置缓存组件

 <keep-alive>   // 缓存组件跳转的页面
  <router-view v-if="$route.meta.keepAlive" class="ui-view" transition-mode="out-in"></router-view>
</keep-alive>
// 非缓存组件跳转页面
<router-view v-if="!$route.meta.keepAlive" class="ui-view" transition-mode="out-in"></router-view>

3.在页面注册对应的事件

(1). 在data中定义一个初始值 scroll

(2). 在mouted中 ,mouted中的方法代表dom已经加载完毕

window.addEventListener('scroll', this.handleScroll);

(3).methods 用于存放页面函数

handleScroll () {
this.scroll = document.documentElement && document.documentElement.scrollTop
console.log(this.scroll)
}

4.activated 为keep-alive加载时调用

activated() {
if(this.scroll > 0){
window.scrollTo(0, this.scroll);
this.scroll = 0;
window.addEventListener('scroll', this.handleScroll);
}
}

5.deactivated 页面退出时关闭事件 防止其他页面出现问题

deactivated(){
window.removeEventListener('scroll', this.handleScroll);
}

方法二:利用beforeRouteLeave和watch

main.js中:

var store = new Vuex.Store({   //记得先引入vuex
state: {
recruitScrollY: 0
},
getters: {
recruitScrollY: state => state.recruitScrollY
},
mutations: {
changeRecruitScrollY(state, recruitScrollY) {
state.recruitScrollY = recruitScrollY;
}
},
actions: { },
modules: {}
})

组件中(/flashSaleListX为当前组件,即需要记住滚动条位置的组件):

methods:{
isTabRoute: function() {
if (this.$route.path === '/flashSaleListX') {
let recruitScrollY = this.$store.state.recruitScrollY
document.documentElement.scrollTop = recruitScrollY;
}
}
},
watch: {
'$route': 'isTabRoute',
},
beforeRouteLeave(to, from, next) {
let position = document.documentElement && document.documentElement.scrollTop; //记录离开页面时的位置 if (position == null) position = 0
this.$store.commit('changeRecruitScrollY', position) //离开路由时把位置存起来
next()
}

方法三:(适用于方法二获取不到滚动位置)

组件中:

<template>
<div ref="div1">
  ··· 内容···
</div>
</template>
beforeRouteEnter(to, from, next) {
next(vm => {
const div1 = vm.$refs.div1
// 记录滚动高度
div1.scrollTop = vm.scroll
})
},
beforeRouteLeave(to, from, next) {
const div1 = this.$refs.div1;
this.scroll = div1.scrollTop; //data中记得定义变量scroll
next()
}

 注:在路由配置中,记住滚动的页面keep-alive需为true

vue 路由跳转记住滚动位置,返回时回到上次滚动位置的更多相关文章

  1. vue 路由跳转记住当前页面位置

    从列表页面跳去详情页面, 在列表页面的生命周期:deactivated  中把当前的scrollTop位置存下来,可以存在localstorage中,也可以存在vuex中, 从详情页面返回列表页面:a ...

  2. vue路由跳转的方式

    vue路由跳转有四种方式 1. router-link 2. this.$router.push() (函数里面调用) 3. this.$router.replace() (用法同push) 4. t ...

  3. 详解vue 路由跳转四种方式 (带参数)

    详解vue 路由跳转四种方式 (带参数):https://www.jb51.net/article/160401.htm 1.  router-link ? 1 2 3 4 5 6 7 8 9 10 ...

  4. vue路由跳转报错解决

    vue路由跳转: setTimeout(function () { console.log(this); this.$router.push("/login"); },800) 语 ...

  5. 去除vue路由跳转地址栏后的哈希值#

    去除vue路由跳转地址栏后的哈希值#,我们只需要在路由跳转的管理文件router目录下的index.js中加上一句代码即可去掉哈希值# mode:"history" import ...

  6. Vue路由跳转到新页面时 默认在页面最底部 而不是最顶部 的解决

    今天碰到一个问题   vue路由跳转到新的页面时会直接显示页面最底部  正常情况下是显示的最顶部的  而且好多路由中不是全部都是这种情况  折腾好长时间也没解决  最后在网上找到了解决办法 其实原理很 ...

  7. vue路由跳转取消上个页面的请求和去掉重复请求

    vue路由跳转取消上个页面的请求和去掉重复请求 axios 的二次封装(拦截重复请求.异常统一处理) axios里面拦截重复请求

  8. PhpStorm 回到上次编辑位置的快捷键

    回到上次编辑位置 Ctrl + Alt + <- (向后) Ctrl + Alt + -> (向前) 这个快捷键有时和电脑桌面快捷键冲突.解决办法: win + D 回到电脑桌面,右键-& ...

  9. vue路由跳转时判断用户是否登录功能

    通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以 ...

随机推荐

  1. Twain协议部分翻译

    转载:https://blog.csdn.net/a848691591/article/details/41006807 4.1 性能 应用程序与源进行性能协商的能力使人们能够控制TWAIN兼容的程序 ...

  2. IDEA 打开Run Dashboard 分组启动

    一,项目文件夹中,找到 .idea-->workspace.xml 添加: <component name="RunDashboard"> <option ...

  3. PHP出现报警后需要修改 date.timezone 的值(php.ini)

    PHP调试的时候出现了警告: It is not safe to rely on the system解决方法,其实就是时区设置不正确造成的,本文提供了3种方法来解决这个问题. 实际上,从PHP 5. ...

  4. css 苹方字体

    苹方-简 常规体 font-family: PingFangSC-Regular, sans-serif; 苹方-简 极细体 font-family: PingFangSC-Ultralight, s ...

  5. Windows 获取控制台窗口句柄

    详细信息 因为多个窗口可能具有相同的标题,您应该更改当前的控制台窗口标题为唯一的标题.这将有助于防止返回不正确的窗口句柄.使用 SetConsoleTitle() 来更改当前的控制台窗口标题.下面是此 ...

  6. day12 bash中的if、for

    bash 变量bash 定义:x= 作用:记录状态 规则:字母开头,后面可以接字母.数字.下划线 export args:将变量定义为全局变量 $$[]:括号中可以进行简单的数学整数运算,可以用ech ...

  7. thinkphp Trace方法

    页面Trace只能用于有页面输出的情况,但是trace方法可以用在任何情况,而且trace方法可以用于AJAX等操作. Trace方法的格式: trace('变量','标签','级别','是否记录日志 ...

  8. JS数组 一起组团(什么是数组)一个数组变量可以存放多个数据

    一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦 ...

  9. SoapUI测试接口【转】

    下载安装soapUI工具,具体安装按照提示往下走就可以,这里不着重说明,下面是我打开soapUI工具的起始窗口:  在Projects上鼠标右键点击,选择new soap project(新建一个SO ...

  10. 高斯消元+期望dp——light1151

    高斯消元弄了半天没弄对.. #include<bits/stdc++.h> using namespace std; #define maxn 205 #define eps 1e-8 d ...