Vue.js 中使用 vue-router 实现滚动行为的方式

在使用 Vue.js 和 vue-router 构建单页面应用的过程中,我们可能会遇到需要在路由切换时保持页面滚动位置不变的需求。本文将介绍如何使用 vue-router 实现滚动行为的方式,并提供示例代码进行详细说明。

路由切换默认的滚动行为

在默认情况下,在 Vue.js 和 vue-router 中进行路由切换时,页面会返回到顶部。这是因为每次路由切换时,页面的 DOM 元素都会被重新渲染,而浏览器默认的行为是保持滚动位置为顶部。

滚动行为的控制方法

Vue.js 中提供了一个全局的路由钩子 beforeEach,它可以用来控制页面路由行为。通过这个钩子,我们可以在路由切换时触发一些行为,例如改变标题、添加转场动画等,同时也可以通过该钩子实现滚动行为的控制。

在路由钩子 beforeEach 中,我们可以获取到 to 和 from 两个路由对象,它们分别表示即将进入的路由和离开的路由。我们可以通过这两个路由对象,拿到页面的滚动位置,并在进行路由跳转时重新设置页面的滚动位置。

实现方式示例代码:

需要滚动位置时使用 scrollBehavior 选项来返回一个对象,基于这个对象的滚动位置差在路由切换时自动执行滚动行为。

代码中的 scrollBehavior 钩子函数为路由提供了自定义滚动行为。该钩子函数接收三个参数:

  • to: 即将要进入的路由对象
  • from: 正在离开的路由对象
  • savedPosition: 当前业务逻辑是否需要滚动行为

如果需要滚动行为,那么该函数会返回一个滚动位置的对象。在返回对象时应该考虑到以下几种情况:

  • 如果存在滚动位置,那么路由切换时优先使用存储的滚动位置。
  • 如果离开的路由被缓存(keep-alive),保存滚动位置。
  • 如果没有滚动存在,默认返回原位置。

总结

Vue.js 中使用 vue-router 实现滚动行为可以通过定制 scrollBehavior 钩子函数以及保存滚动位置对象实现。这是一种简单而方便的方式,在实际开发中可以很好地提升用户体验。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6528b9867d4982a6ebb45667


纠错
反馈