VUE :keepAlive + Better-Scroll 点击列表进去详情页返回仍然在点击位置 我列表滑动用的框架是 Better-Scroll

 

1.keepAlive的使用,在router下列表页路径 加meta:{ keepAlive: true}

  {path: '/', name: 'index', component: index,meta: {keepAlive: true}},

 

 

 2.App.vue中

<template>
  <div id="app" class="color333">
    <!-- 可以被缓存的视图组件 -->
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <!-- 不需要被缓存的试图组件 -->
    <router-view v-if="!$route.meta.keepAlive"></router-view>
  </div>
</template>

 

 3.这个时候已经可以实现缓存了,但是会出现列表划不动的情况,或者偶尔跳到顶部的情况(没有计算到better-scroll的高度),继续上解决方案;我的列表部分是一个单独的组件,上面的ref是滚动用,下面的ref是在计算高度中用。(Better-scroll的使用记录的不是很明确,如有需要,单独去搜,看官网案例)

tip:记得引入哦:import BScroll from 'better-scroll'

这里有better-scroll的使用

 

 

 

3.跳转详情页的时候:跳转时记录位置

  //  缓存scroll滚动的高度
        this.top=this.$refs['scrollul'].getBoundingClientRect().top;
        window.sessionStorage.setItem('scrollTop',this.scrollTop)

 

 4.在进入列表页的时候读取位置

 activated () {

    //让BSscroll滚动到之前存的scrollY位置
    if (window.sessionStorage.getItem('scrollTop')) {
      this.$refs['scrollul'].style.top  =this.top+ 'px'
          this.scroll.scrollTo(0,Number(window.sessionStorage.getItem('scrollTop')))
          this.scroll.refresh()
      }
    }

 

 

 

posted on 2020-06-17 13:59  一往而深のcode  阅读(721)  评论(0编辑  收藏  举报