vue跳转其他页面再跳回原页面记录滚动的位置

本文介绍了在Vue项目中如何在页面跳转后记住并恢复滚动位置。关键点在于利用`beforeRouteLeave`和`beforeRouteEnter`钩子函数,结合`sessionStorage`保存和恢复滚动高度。同时,确保组件被`keep-alive`包裹以保持状态。在离开路由时记录滚动位置,进入路由时检查历史记录并根据条件恢复滚动位置。

vue 跳转其他页面再跳回原页面记录滚动的位置

此方法使用当页面存在滚动条,当跳转其他页面,再跳转到此页面时,保存当前的位置;

前提 必须给组件设置 keep-alive

<div class="shop-list" ref="shopList" >
    <div class="page_swiper">
        <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
            <van-swipe-item>
                <a href="">1</a>
            </van-swipe-item>
            <van-swipe-item>
                <a href="">2</a>
            </van-swipe-item>
            <van-swipe-item>
                <a href="">3</a>
            </van-swipe-item>
            <van-swipe-item>
                <a href="">4</a>
            </van-swipe-item>
        </van-swipe>
    </div>
    
    <!-- 封装提取部分  商品 -->
    <tabShopList :searchKey="searchKey" :isTabFixed="isTabFixed"></tabShopList>
</div>

注意 shopList 是有滚动效果的

 	beforeRouteLeave (to, from, next) {
 		// 记录 滚动的高度 this.$refs.shopList.scrollTop 其中shopList 是滚动的元素
        sessionStorage.shopAskPositon= this.$refs.shopList.scrollTop
        next();
    },
    beforeRouteEnter (to, from, next) {
        console.log(from)
        if (!sessionStorage.shopAskPositon|| from.name !== 'tradeDetail') {
            //当前页面刷新不需要切换位置 或者通过form来判断
            sessionStorage.shopAskPositon= 0;
            // 下面可以操作此页面中data的值和方法
            next(vm => {
                vm.isTabFixed = false
            });
        } else {
            next(vm => {
                if (vm && vm.$refs.shopList) {
                //通过vm实例访问this
                setTimeout(function() {
                    vm.$refs.shopList.scrollTo(0, sessionStorage.shopAskPositon, false);
                }, 0); //同步转异步操作
                }
            });
        }
    },

注意观察滚动切换页面后 保存的高度值是否有变化
在这里插入图片描述
其他效果看个人情况而定,不懂的可以留言

Vue项目中,实现页面跳转后自动返回之前页面滚动位置,可以通过Vuex来管理和持久化滚动位置状态。以下是具体步骤和代码示例: 参考资源链接:[vue页面跳转后返回原页面初始位置方法](https://wenku.csdn.net/doc/6412b49ebe7fbd1778d40387?spm=1055.2569.3001.10343) 首先,确保你的项目已经安装并配置了Vuex。在`main.js`中初始化Vuex状态管理器,并创建一个状态`scrollY`来保存滚动位置: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { scrollY: 0 }, mutations: { setScrollY(state, scrollY) { state.scrollY = scrollY } }, actions: { setScrollY({ commit }, scrollY) { commit('setScrollY', scrollY) } } }) new Vue({ store, // ...其他配置 }).$mount('#app') ``` 当你准备跳转到新的页面时,在跳转前获取当前滚动位置,并使用`setScrollY` action来更新状态: ```javascript // 获取当前滚动位置 let currentScrollY = window.scrollY // 更新Vuex状态 this.$store.dispatch('setScrollY', currentScrollY) ``` 在新页面加载完成后,你可以在`mounted`钩子中设置滚动位置,以确保滚动位置可以被正确恢复: ```javascript mounted() { // 检查是否存在滚动位置状态,如果存在则滚动到该位置 if (this.$store.state.scrollY > 0) { window.scrollTo(0, this.$store.state.scrollY) // 清空滚动位置状态,防止重复跳转时影响 this.$store.dispatch('setScrollY', 0) } } ``` 这种方法可以确保用户在进行页面跳转后能够返回到之前页面滚动位置,增强用户体验。 如果你在使用KeepAlive包裹组件,可以通过watch来监听当前组件的路由变化,并记录滚动位置: ```javascript watch: { '$route'(to, from) { if (to.meta.keepAlive) { // 记录进入的页面滚动位置 this.scrollY = window.scrollY } else { // 清除离开的页面滚动位置 window.scrollTo(0, 0) } } }, ``` 注意,这里`to.meta.keepAlive`表示路由元信息中定义了`keepAlive`属性,该属性通常在路由配置中设置。通过这种方式,你可以更灵活地处理KeepAlive组件内页面滚动位置保存和恢复。 阅读《vue页面跳转后返回原页面初始位置方法》可以获得更多关于如何处理Vue页面跳转滚动位置恢复的技巧和细节。 参考资源链接:[vue页面跳转后返回原页面初始位置方法](https://wenku.csdn.net/doc/6412b49ebe7fbd1778d40387?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值