Vue 中在路由切换的时候保留之前滚动条的高度

Vue 中在路由切换的时候保留之前滚动条的高度

效果图
在这里插入图片描述

说明: 实现的主要思路是首先使用keep-alive将路由缓存起来,再需要保存滚动条的页面使用组件的路由拦截beforeRouteEnterbeforeRouteLeave 组件内的守卫的官方介绍
实现

router部分
const routes = [
    // tabbar
    {
        path: '/',
        redirect: '/home',
        name: 'tabbar',
        meta: { keepAlive: true },
        component: () => import(/* webpackChunkName: "tabbar" */ '@/views/tabbar'),
        children: [
            {
                path: 'home',
                name: 'home',
                meta: { keepAlive: true },
                component: () => import('@/views/tabbar/home')
            },
            {
                path: '/classify',
                name: 'classify',
                meta: { keepAlive: true },
                component: () => import('@/views/tabbar/classify')
            },
            {
                path: '/message',
                name: 'message',
                meta: { keepAlive: true,needToken: true },
                component: () => import('@/views/tabbar/message')
            },
            {
                path: '/shopcar',
                name: 'shopcar',
                meta: { keepAlive: true,needToken: true },
                component: () => import('@/views/tabbar/shopcar')
            },
            {
                path: '/personal',
                name: 'personal',
                meta: { keepAlive: true,needToken: true },
                component: () => import('@/views/tabbar/personal')
            }
        ]
    }
]
用来进行路由的跳转的html部分
<template>
    <div class="tabbar">
        <keep-alive>
            <router-view class="content-box"></router-view>
        </keep-alive>
        <tabbar :tabbarList='tabbarList'/>
    </div>
</template>
home路由中的示例,其他路由设置一样
  1. html
    <template>
        <div class="need-scroll">
            <!--内容部分 -->
        </div>
    </template>
    
  2. js
    在路由每次进入的时候都会触发beforeRouteEnter
    每次离开的时候beforeRouteLeave就会执行
    因此,在每次离开路由的时候,保存当前的高度,进入的时候就给高度赋值
    export default {
        data(){
            return {
                rememberScroll: 0
            }
        },
        beforeRouteEnter(to,from,next){
            next(vm => {
                document.querySelector('.need-scroll').scrollTop = vm.rememberScroll
            })
        },
        beforeRouteLeave(to,from,next){
            if(document.querySelector('.need-scroll')) {
                this.rememberScroll = document.querySelector('.need-scroll').scrollTop
            }
            next()
        }
    }
    
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值