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

最近一直有人私信我,反映之前的一篇文章《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 到对应位置 ,如果没有就滚动到顶部

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值