vue 的路由互相切换时怎么保持当前页面的滚动的距离?最新方案来了

25 篇文章 0 订阅
最近一直有人私信我,反映之前的一篇文章《vue 的路由互相切换时怎么保持当前页面的滚动的距离?》存在问题,今天就贴出来新的思路,还得要自己多思考一下,拒绝CV,确保无问题。

直接贴代码:

<van-tabs v-model="active">
      <van-tab title="标签 1">
        <van-list
          v-model="loading1"
          :finished="finished1"
          finished-text="没有更多了"
          @load="onLoad1"
        >
          <van-cell v-for="item in list1" :key="item" :title="item" />
        </van-list>
      </van-tab>
      <van-tab title="标签 2">
        <van-list
          v-model="loading2"
          :finished="finished2"
          finished-text="没有更多了"
          @load="onLoad2"
        >
          <van-cell v-for="item in list2" :key="item" :title="item" />
        </van-list>
      </van-tab>
      <van-tab title="标签 3">
        <div class="forBox" :style="randomRgb()" v-for="item in 60" :key='item' @click="handleClick(item)">{{item}} ===>vote---3</div>
      </van-tab>
      <van-tab title="标签 4">
        <div class="forBox" :style="randomRgb()" v-for="item in 100" :key='item'>{{item}} ===>vote---4</div>
      </van-tab>
    </van-tabs>

tab改变的时候会改变active的值,接下来设置监听器,这一步是关键

watch: {
    active (news, old) {
      this.scrollRecord['tab' + old] = parseInt(this.scroll) // 离开的tab栏滚动的高度
      if (this.scrollRecord['tab' + news]) {
        this.$nextTick(() => { // 坑不加他会出现滚动距离不够,限制于上一个tab高度问题
          window.scrollTo(0, parseInt(this.scrollRecord['tab' + news])) // 进入的tab栏滚动到记录的距离
        })
      } else {
        window.scrollTo(0, 0)
      }
    }
  },

思路是

    1. watch监听tab的变化,获取新的tabID 和旧的tabID
    1. 旧的tabID 滚动的距离存储在scrollRecord对象里,比如scrollRecord.tab1 = 200
    1. 新的tabID 首先判断scrollRecord存储的是否有新的tabID键值 比如scrollRecord.tab1 == null ? TODO : TODO
    1. 如果有 就window.scrollTo 到对应位置 ,如果没有就滚动到顶部

有问题,私信我,能帮上一定帮
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,当使用前端路由切换到新的路由,默认情况下滚动条会被重置到页面顶部,不会保持原先的滚动位置。如果你想要在路由切换滚动条置顶,你可以通过自定义路由切换滚动行为来实现。在路由配置中,可以使用scrollBehavior函数来自定义滚动行为。scrollBehavior函数接收三个参数:to(目标路由对象)、from(来源路由对象)和savedPosition(之前的滚动位置)。你可以根据这些参数来自定义滚动行为。如果你想让滚动条在路由切换置顶,你可以在scrollBehavior函数中返回{ x: 0, y: 0 }来将滚动条位置重置为页面顶部。这样,在每次路由切换页面都会滚动顶部。这就是如何在Vue中实现路由跳转滚动条置顶的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue 切换路由页面滚动滚动到最上面](https://blog.csdn.net/xingchen678/article/details/128723182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue路由滚动 切换路由之后滚动条在最上面](https://blog.csdn.net/m0_64415782/article/details/131938991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值