美文网首页vue
vue记录当前路由滚动位置

vue记录当前路由滚动位置

作者: 毕竟1米八 | 来源:发表于2019-03-03 16:01 被阅读39次

在App结构中,当切换到底部不同的菜单栏时,需要保持原先页面的滚动位置。这样视觉上才不会造成页面刷新,才能提高用户体验。

一、原理
定义一个全局变量,用来记录当前路由的scrollTop滚动值。监听当前路由离开时,把当前scrollTop值赋值给全局变量,在重新进入路由时,设置当前的scrollTo值为scrollTop。

二、嵌套路由
这里使用的是VueCli3,在router.js中创建一个嵌套路由,在index路由中分配home、order、my三个子路由。

{
      path: '/',
      name: 'index',
      component: () => import('./views/index.vue'),
      redirect:'/home',
      children:[
          {
              path: '/home',
              name: '/home',
              component: () => import('./views/home.vue')
          },
          {
              path: '/order',
              name: '/order',
              component: () => import('./views/order.vue')
          },
          {
              path: '/my',
              name: '/my',
              component: () => import('./views/my.vue')
          }
      ]
}

三、全局变量
在main.js中创建一个homeScrollTop全局变量,用来记录home子路由当前的scrollTop滚动值。

//main.js
let homeScrollTop = 0;
Vue.prototype.$homeScroll = homeScrollTop;

四、监听路由状态
这里涉及到created()和activated()这两个生命周期函数的区别以及this.$nextTick()异步执行Dom刷新的知识点,不懂的童鞋自行google。

//home.vue
export default {
  name: 'home',
  //进入路由即触发 created()只触发一次
  activated (){
    //this.$nextTick()异步执行dom刷新
    this.$nextTick(() => {
        console.log(this.$homeScroll);
        window.scrollTo(0, this.$homeScroll);
    })
  },
  //离开路由时
  beforeRouteLeave(to, from, next){
    console.log(to);
    //全局变量homeScroll默认为0 离开页面时 记录当前的页面滚动值
    this.$homeScroll = document.documentElement.scrollTop || document.body.scrollTop;
    //需要执行next函数 否则不起作用
    next();
  }
}

几行代码就实现了,关键是逻辑思维,这里感谢JR童鞋的帮助!

相关文章

  • vue记录当前路由滚动位置

    在App结构中,当切换到底部不同的菜单栏时,需要保持原先页面的滚动位置。这样视觉上才不会造成页面刷新,才能提高用户...

  • vue使用原生js实现滚动页面跟踪导航高亮的示例代码

    使用vue做一个专题页面。滚动页面指定区域导航高亮。监听滚动页面事件,对比当前页面的位置与元素的位置,如果当前滚动...

  • vue (记录遇到的问题)

    切换路由后滚动条位置不在顶部 不生效的情况下 监听路由切换设置#app 距离顶部的位置 this 不指向vue的时...

  • vue 记录浏览位置

    vue中记录上浏览位置的方法场景描述: 在当前页面浏览时,点击进入其他页面,再返回时希望滚动到浏览时的位置 解决方...

  • 滚动条恢复行为

    问题 Vue路由跳转,目标页面会继承起始页面的滚动条的位置。 history.scrollRestoration ...

  • 2020-09-22

    VUE 1. vue 滚动行为用法,进入路由需要滚动到浏览器底部 头部等等 使用场景:使用前端路由,当切换到新路由...

  • vue路由跳转页面滚动到顶部

    如果想在vue路由跳转后滚动到指定的位置,只需要调用内置方法(scrollBehavior)既可。具体参考官网:(...

  • Vue点击按钮回到顶部

    1.在组件里进行按钮的样式设置 2.监听当前页面滚动位置 3.触发滚动事件 tip:main.js中设置,路由跳转...

  • js列表页面跳转详情,返回原来的位置

    思路:1.记录当前滚动条的位置,2.记录当前页面的数据,3.记录当前加载到第几页;存储到storage中,再次进来...

  • vue 平滑滚动到指定位置

    vue 平滑滚动到指定位置

网友评论

    本文标题:vue记录当前路由滚动位置

    本文链接:https://www.haomeiwen.com/subject/jkapuqtx.html