首页 > 其他分享 >VueRouter中的滚动行为

VueRouter中的滚动行为

时间:2023-04-01 19:44:54浏览次数:71  
标签:return savedPosition VueRouter scrollBehavior 滚动 行为 路由 页面

参考:https://github.com/vuejs/vue-router/blob/dev/docs/zh/guide/advanced/scroll-behavior.md

滚动行为

观看 Vue School 的如何控制滚动行为的免费视频课程 (英文)

使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。

注意: 这个功能只在支持 history.pushState 的浏览器中可用。

当创建一个 Router 实例,你可以提供一个 scrollBehavior 方法:

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

scrollBehavior 方法接收 tofrom 路由对象。第三个参数 savedPosition 当且仅当 popstate 导航 (通过浏览器的 前进/后退 按钮触发) 时才可用。

这个方法返回滚动位置的对象信息,长这样:

  • { x: number, y: number }
  • { selector: string, offset? : { x: number, y: number }} (offset 只在 2.6.0+ 支持)

如果返回一个 falsy (译者注:falsy 不是 false参考这里)的值,或者是一个空对象,那么不会发生滚动。

举例:

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

对于所有路由导航,简单地让页面滚动到顶部。

返回 savedPosition,在按下 后退/前进 按钮时,就会像浏览器的原生表现那样:

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

如果你要模拟“滚动到锚点”的行为:

scrollBehavior (to, from, savedPosition) {
  if (to.hash) {
    return {
      selector: to.hash
    }
  }
}

我们还可以利用路由元信息更细颗粒度地控制滚动。查看完整例子请移步这里

异步滚动

2.8.0 新增

你也可以返回一个 Promise 来得出预期的位置描述:

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

将其挂载到从页面级别的过渡组件的事件上,令其滚动行为和页面过渡一起良好运行是可能的。但是考虑到用例的多样性和复杂性,我们仅提供这个原始的接口,以支持不同用户场景的具体实现。

平滑滚动

只需将 behavior 选项添加到 scrollBehavior 内部返回的对象中,就可以为支持它的浏览器启用原生平滑滚动:

scrollBehavior (to, from, savedPosition) {
  if (to.hash) {
    return {
      selector: to.hash,
      behavior: 'smooth',
    }
  }
}

标签:return,savedPosition,VueRouter,scrollBehavior,滚动,行为,路由,页面
From: https://www.cnblogs.com/openmind-ink/p/17279196.html

相关文章

  • Vue 2中实现数字滚动效果
     代码:<template><divclass="statistics-num"><!--显示当前数字,不使用逗号分隔符--><spanclass="num">{{currentVal.toString()}}</span><!--显示当前数字,用逗号分隔符--><!--<spanclass="num......
  • vue2中使用antv/G6节点内容可滚动的ER图
    先举一个栗子: 如果不会请移步到官网的栗子,请点击查看狠人话不多,直接给大家上代码:整体代码片段<template><divid="container"style="position:relative;"></div></template><script>/*eslint-disable*/importG6from"@antv/g6";i......
  • react设置滚轮横向滚动
    1.准备importReact,{useRef,useEffect}from'react';constuseHorizontalScroll=({children,...layoutProps})=>{constelRef=useRef();useEffect(()=>{constel=elRef.current.children[0];//这个是通过ref获取被包住的需要滚动的元素......
  • Div滚动到头以后置顶
    1<!DOCTYPEHTML>2<html>3<head>4<metacharset="utf-8"/>5<title>Div滚动到头以后置顶</title>6</head>7<bodystyle="height:2000px;">8<divstyle="height:200px&q......
  • css实现横向滚动文字
    css如何做横向滚动文字在css中,想要实现横向滚动的文字,需要利用animation属性和@keyframes规则来实现元素缩放的动画效果,通过@keyframes规则,能够创建动画。创建动画的原理是,将一套CSS样式逐渐变化为另一套样式。在动画过程中,您能够多次改变这套CSS样式。以百分比来规定改......
  • vue elementui中使表的滚动条 滚到顶部或底部
    1.设置table的ref为tableList2.设置滚动至顶部this.$refs.tableList.bodyWrapper.scrollTop=0;3.设置滚动至底部this.$refs.tableList.bodyWrapper.scrollTop=this.$refs.tableList.bodyWrapper.scrollHeight;//如果请求完更新数据,需要使用$nextTickthis.$next......
  • 第十一章——电子商务网站用户行为分析及服务推荐
    第一部分代码一:python访问数据库importpandasaspdfromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:102011@localhost/test?charset=utf8')sql=pd.read_sql('all_gzdata',engine,chunksize=10000)''&#......
  • 行为型:观察者模式
    定义观察者模式属于行为型模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。一种一对多的关系中一称为......
  • 移动端实现页面滚动到下面,自动加载更多
    css代码.box{width:500px;height:500px;overflow-y:auto;}html<divclass="box"ref="box"><!--列表内容放在这里--><!--列表内容如果......
  • m基于C3D-hog-GRNN广义回归神经网络模型的人员异常行为识别算法的matlab仿真
    1.算法描述      实时的人群异常行为识别是一项极具挑战的工作,具有较高的现实意义和社会需求,快速准确地判断出异常行为并及时预警,一直是我们探索的方向。传统的机器......