vue页面切换时滚动条会记录之前的位置

前言

该问题最终是由页面过渡导致的,没有使用过渡效果的小伙伴应该是有其他原因,加油吧。。。。。

问题描述

A页面下拉到距离页面顶部200px位置处,然后切换到B页面,
结果滚动条依然在距离顶部200px处。
将在A页面的滚动条位置记录了下来。

寻找问题思路

因为在逻辑上并没有对页面做滚动行为相关的处理,所以首先排除业务代码的嫌疑,
那么问题很有可能就是在直接处理页面切换时造成的,暂时先将vue的过渡取消试一下

取消vue的过渡后

页面果然没有这个问题了,那么定位到了问题,这个问题就已经被修复了百分之五十了,接着继续分析。

这个是具体的过渡效果:(相信大家都是对vue很熟悉了,不熟悉过渡的小伙伴可以自己对照官网看一下)

 // 元素插入之前
    .fade-enter {
        opacity: 0;
    }
    // 离开过度的结束状态
    .fade-leave-to {
        opacity: 0;
    }
    // 进入过渡的结束状态
    .fade-enter-to {
        opacity: 1;
    }
    // 进入过渡生效时的状态,只在过渡过程中应用
    .fade-enter-active {
        transition: all .3s ease-out .5s;
    }
    // 离开过渡生效时的装药,只在过渡过程中应用
    .fade-leave-active {
        transition: opacity .3s;
    }
调试:

打开控制台,抓取到过渡的最外层元素,在页面切换时观察dom的变化过程

结果:

虽然从过渡的代码上来看,两个页面之间的切换是无缝衔接的,但实际上在整个过程中,vue是控制样式来进行页面切换,所以页面会有短时间的共存的现象,这也就导致了第二个页面记录下了前一个页面滚动条的位置。

解决方案:

实际上解决问题的方法和我们刚才分析出的问题关系不大,在我们定位到是过渡产生的问题时就能去着手解决了。

使用vue过渡的钩子函数:afterEnter(进入过渡状态结束时)

afterEnter() {
    if (window.scrollY != 0) {
        window.scroll(0, 0)
    }
}

在进入过渡状态结束时将滚动条设置致顶即可。

测试后可以完美解决问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值