Vue scrollBehavior 转动行动,完成退却页面显现在上次阅读的位置

前提:之前写过关于keep-Alive组件,来实如今列表页进入详情页后,退却,返回列表,显现上次接见的位置(道理就是缓存列表页数据来完成),现在发明别的一个题目,就是假如背景操纵转变数据的状况,缓存的要领就会致使数据更新不实时致使一些页面毛病(比方:商品疑问,在背景回复以后,不能够修正内容,前台更新不实时就会致使,前台显现可编辑,但现实状况是不可编辑了),所以又继承研讨别的一种解决要领,scrollBehavior 来完成。

简介:运用前端路由,当切换到新路由时,想要页面滚到顶部,或许是坚持本来的转动位置,就像从新加载页面那样。 vue-router 能做到,而且更好,它让你能够自定义路由切换时页面怎样转动。

注重: 这个功用只在支撑 history.pushState 的浏览器中可用。
官方文档简介:转动行动

运用要领:

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    // return 希冀转动到哪一个的位置
  }
})

或许集成形式写法:

utils.js

export function scrollBehavior (to, from, savedPosition) {
  // return 希冀转动到哪一个的位置
}

index.js

import Vue from 'vue'
import Router from 'vue-router'
import { scrollBehavior } from './utils'
Vue.use(Router)
const router = new Router({
  mode: 'history',
  scrollBehavior,
  routes: [
  ...routesPC,
  ...routesMO
  ]
})
export default router

scrollBehavior 要领吸收 to 和 from 路由对象。第三个参数 savedPosition 当且仅当 popstate 导航 (经由过程浏览器的 行进/退却 按钮触发) 时才可用。
在该要领内,能够经由过程推断路由to,from两个对象来做一些必要的推断;
savedPosition 参数是纪录的上次转动的位置;
经由过程return {x:number,y:number}来掌握页面转动的位置;

关于一切路由导航,简朴地让页面转动到顶部。

scrollBehavior (to, from, savedPosition) {
  return { x: 0, y: 0 }
}

想要在退却时,转动到上次转动的位置,假如满足前提,savedPosition有值的状况下:

scrollBehavior (to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition
  } else {
    return { x: 0, y: 0 }
  }
}

新增状况:异步转动

当页面数据须要要求加载有耽误的状况下,页面假如直接转动,会涌现转动后,页面数据要求返来,DOM从新衬着,转动失效的状况;
所以官方文档给补充了异步转动的要领:

scrollBehavior (to, from, savedPosition) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({ x: 0, y: 0 })
    }, 500)
  })
}

这个会在返回后,有肯定耽误再转动,能够依据本身项目的具体状况举行肯定修正,兼容;

注:我的项目mobile端数据加载运用的是vue-mugen-scroll滑动加载数据组件,网上没找到能触发它加载的要领,所以,在返回列表页后,数据革新,只要一页数据,转动究竟,也找不到上次的数据,呜呜呜……所以照样没有解决我的题目,然则这个要领是很好的,只是运用状况,会有限定,纪录一下,以备后用。

    原文作者:采蘑菇的小姑娘
    原文地址: https://segmentfault.com/a/1190000019301736
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞