首页 > 其他分享 >【Vue Router】015-滚动行为*

【Vue Router】015-滚动行为*

时间:2023-02-22 21:02:15浏览次数:53  
标签:Vue 滚动 savedPosition router return 015 scrollBehavior Router const


1.15 滚动行为*

直接贴文档吧,使用时再进行详细探索,很难所有功能都亲自实现一遍!

1.15.1 概述

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

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

1.15.2 基本使用

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

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

​scrollBehavior​​​ 函数接收 ​​to​​​和​​from​​​ 路由对象,如 ​​Navigation Guards​​​。第三个参数 ​​savedPosition​​​,只有当这是一个 ​​popstate​​​ 导航时才可用(由浏览器的后退/前进按钮触发)。该函数可以返回一个 ​​ScrollToOptions​

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
// 始终滚动到顶部
return { top: 0 }
},
})

你也可以通过 ​​el​​​ 传递一个 CSS 选择器或一个 DOM 元素。在这种情况下,​​top​​​ 和 ​​left​​ 将被视为该元素的相对偏移量。

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
// 始终在元素 #main 上方滚动 10px
return {
// 也可以这么写
// el: document.getElementById('main'),
el: '#main',
top: -10,
}
},
})

如果返回一个 falsy 的值,或者是一个空对象,那么不会发生滚动。

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

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { top: 0 }
}
},
})

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

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
if (to.hash) {
return {
el: to.hash,
}
}
},
})

如果你的浏览器支持​​滚动行为​​,你可以让它变得更流畅:

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
if (to.hash) {
return {
el: to.hash
behavior: 'smooth',
}
}
}
})

1.15.3 延迟滚动

有时候,我们需要在页面中滚动之前稍作等待。例如,当处理过渡时,我们希望等待过渡结束后再滚动。要做到这一点,你可以返回一个 Promise,它可以返回所需的位置描述符。下面是一个例子,我们在滚动前等待 500ms:

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ left: 0, top: 0 })
}, 500)
})
},
})

我们可以将其与页面级过渡组件的事件挂钩,以使滚动行为与你的页面过渡很好地结合起来,但由于使用场景可能存在的差异和复杂性,我们只是提供了这个基础来实现特定的用户场景。


标签:Vue,滚动,savedPosition,router,return,015,scrollBehavior,Router,const
From: https://blog.51cto.com/u_13272819/6079439

相关文章

  • 【Vue Router】014-过渡动效*
    1.14过渡动效*1.14.1概述想要在你的路径组件上使用转场,并对导航进行动画处理,你需要使用​​v-slotAPI​​:<router-viewv-slot="{Component}"><transitionname="fa......
  • 【Vue Router】013-Vue Router 与组合 API
    1.13VueRouter与组合API1.13.1概述实际上,我们在上面的代码里面已经尽量使用组合API了,在这里进行一个总结。1.13.2在setup()函数中访问Router和当前路由因为我们......
  • 【Vue Router】012-数据获取
    1.12数据获取1.12.1概述当路由被激活时,我们往往需要从服务器获取数据,以便能够正确地选渲染组件。数据获取的方式有两种,具体使用哪一种取决于应用场景和用户体验。导航后获......
  • vue3介绍 vue3创建项目 扩展vite setup函数 ref和reactive 计算属性和监听属性 生命周
    目录回顾vue3介绍vue的变化组合式API与配置项APIvue3创建项目扩展之vite使用步骤setup函数ref和reactiverefreative总结:计算属性和监听属性计算属性获取get 修改set监听属......
  • Vue3
    目录Vue3vue3介绍vue3创建项目1.使用vue-cli创建2.vite创建vue项目setup函数1.setup函数2.vue2的创建vue实例和vue3创建vue实例的区别ref和reactivecomputed计算属性watc......
  • vue3 介绍、vue3 创建项目、setup函数、ref和reactive、计算属性和监听属性、生命周期
    目录1vue3介绍2vue3创建项目2.1使用vue-cli2.2vite3setup函数4ref和reactive5计算属性和监听属性5.1计算属性5.2监听属性6生命周期7toRefs8scriptsetup的作......
  • Vue相关笔记
    Promise基本使用Promise是异步编程的一种解决方案,用于一个异步操作的最终完成(或失败)及其结果值的表示,比传统的回调函数方案更加合理。varpromise=newPromise((reso......
  • vue-车辆管理系统结合vue、elementui
    1.展示所有车型列表1.多对多展示用elementui展示后端车型列表:由于后端传过来的数据是数组套对象(经销商和车型是多对多关系,一个车型可以对应多个经销商),我们用普通的ta......
  • Vue急速入门-5
    vue-cli创建项目前端工程化,项目>>>(vue-cli),创建处vue项目,单页面应用(spa)vue-cli创建项目开发,在项目中开发,最后上线,一定要编译 '纯粹的html,js,css'vue-cli工具由于......
  • 178-vue 选项式 API 的script格式
    使用选项式API,我们可以用包含多个选项的对象来描述组件的逻辑,例如data、methods和mounted。选项所定义的属性都会暴露在函数内部的this上,它会指向当前的组件实例。<s......