关于vue的scrollBehavior(滚动行为)

作者: 德日班勒 | 来源:发表于2022-07-12 20:57 被阅读0次

咱们在实际开发中会遇到一个问题:
我们在一个很长的列表页往下拉,然后点击列表中的某一个数据进入到详情页查看。此时我们决定返回列表也继续查看列表。
很多情况下,由于列表页的组件已经被销毁,所以我们返回到列表页后页面会置顶,不得不又重新下拉查看列表,这样就做了很多没有必要的操作,也是不符合用户的预期。

用户希望当我查看玩详情页以后返回,返回列表页的位置是刚刚浏览的位置

这种情况有什么好的解决办法呢?
这里带来了3种解决方案:

1.使用<keep-alive> 缓存,即不销毁列表页

APP.js中

<template>
  <div id="app">
    <!-- <router-view/> -->
    <keep-alive>
        <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
  </div>
</template>

router.js中

 routes: [
    {
      path: '/',
      name: 'List',
      //component: List
      component: () => import('./views/index/list.vue'),
      meta: {
        keepAlive: true // 需要缓存
      }
    },
    {
      path: '/content/:contentId',
      name: 'content',
      component: () => import('./views/index/content.vue'),
      meta: {
        keepAlive: false // 不需要缓存
      }
    },
]

详情页面不需要缓存,列表页面需要缓存

2.使用路由守卫

原理就是在beforRouterLeave的路由钩子记录当前页面滚动位置

//在页面离开时记录滚动位置,这里的this.scrollTop可以保存在vuex的state或者浏览器本地
beforeRouteLeave (to, from, next) {
    this.scrollTop = document.documentElement.scrollTop || document.body.scrollTop
    next()
  },

//进入该页面时,用之前保存的滚动位置赋值
beforeRouteEnter (to, from, next) {
    next(vm => {
      document.body.scrollTop = vm.scrollTop
    })
  },

这里的this.scrollTop可以保存在vuex的state或者浏览器本地

3.使用vue-router方法scrollBehavior(推荐)

router.js中

const scrollBehavior = function scrollBehavior (to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition;
  }else {
      return { x: 0, y: 0 }
   }
};
const router = new Router({
  routes,
  scrollBehavior,
});

该方案直接在路由进行处理,兼容每个页面并且页面加载完后并也不会产生1px的滚动位置。

相关文章

  • 关于vue的scrollBehavior(滚动行为)

    咱们在实际开发中会遇到一个问题:我们在一个很长的列表页往下拉,然后点击列表中的某一个数据进入到详情页查看。此时我们...

  • vue的scrollBehavior滚动行为

    我们在使用vue-router做路由跳转时,如果想回退到上次页面时,并且向保存当时滚动到的位置,使用scrollB...

  • vue 不默认滚动条位置

    scrollBehavior: () => ({ // 滚动条滚动的行为,不加这个默认就会记忆原来滚动条的位置 ...

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

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

  • vue-router跳转滚动的问题(scrollBehavior

    使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。这个功能只在支持...

  • Vue router

    Vue Router 1. 在Vue中引入router 2. 新建路由 如: scrollBehavior更多详情...

  • vue滚动行为

    scrollBehavior(只在支持history.pushState的浏览器可用) 使用场景:点击浏览器自带的...

  • vue-scrollBehavior

    需求:点击跳转到指定页面并定位到页面的指定标题位置 官方方案:scrollBehavior 限制:需要在histo...

  • vue 组件的 scrollBehavior

    浏览器对用户访问网页的记录 在聊如何管理vue组件滚动行为之前,先简单说说(毕竟深入了我也很模糊o(╯□╰)o)浏...

  • 2020-09-22

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

网友评论

    本文标题:关于vue的scrollBehavior(滚动行为)

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