javascript - 在使用 vue 路由器更改到另一个路由器位置之前,允许当前窗口滚动到顶部
问题描述
我希望我的页面在切换到另一个选项卡之前滚动到顶部。我尝试了以下代码,但徒劳无功。
<b-collapse id="nav-collapse" is-nav>
<b-navbar-nav class = "ml-5">
<b-nav-item :active= "$route.matched.some(({ name }) => name === 'tab1')" class = "navitem" @click= "routehome">tab1</b-nav-item>
<b-nav-item :active= "$route.matched.some(({ name }) => name === 'tab2')" class = "navitem" @click= "routeproject">tab</b-nav-item>
<b-nav-item :active= "$route.matched.some(({ name }) => name === 'tab3')" class = "navitem" @click= "routeexperience">tab3</b-nav-item>
</b-navbar-nav>
<b-collapse id="nav-collapse" is-nav>
在脚本中,我尝试添加它,但由于代码异步运行,它不显示动画。
totab1() {
window.scrollTo(0, 0);
this.$router.push("/tab1");
},
totab2() {
window.scrollTo(0, 0);
this.$router.push("/tab2");
},
然后我尝试添加 then 函数,但似乎 windows.scroll(0,0) 不支持。有没有办法解决这个问题?
totab3() {
window.scrollTo(0, 0).then(() => {
this.$router.push("/tab3");
})
}
解决方案
在页面更改之前滚动到顶部
这可以通过 Vue-router 的Navigation Guards来实现。尽管旨在保护路由,但它们也可以很容易地用于在路由更改之前调用任意函数。
您可以从特定组件中调用它(使用组件中的 guard)
beforeRouteLeave() { window.scrollTo(0, 0) }
或者,要应用于所有路由,请在您的 router.js 文件中应用,例如
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
window.scrollTo(0, 0);
})
页面更改后滚动到顶部
Vue路由器有一个有用的scrollBehavior
方法。在您的情况下,您想返回{ x: 0, y: 0 }
到页面的顶部和左侧。所以在你的 router.js 文件中,添加如下内容:
const router = new VueRouter({
routes: [...],
scrollBehavior () {
return { x: 0, y: 0 }
}
});
推荐阅读
- python - google colab UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfa in position 21: invalid start byte
- c# - 使用 Dynamics NAV 2017 连接和使用 ODataV4 Connected Service 导致有效负载错误
- reactjs - 反应笑话:不能在模块外使用导入语句
- javascript - 来自 useState 钩子的 setState((prevState) => newState) 内部的函数被调用两次,即使 setState 只被调用一次
- c++ - EnumDisplaySettings 不适用于非空设备名称参数
- xslt - 如何在 XSLT 输出中控制名称空间前缀(特别是默认名称空间)?
- html - 身体{高度:1000px;css 文件中的 } 不起作用,但可以内联
- python - 转换为 Python 标量
- amazon-web-services - 通过 AWS CLI 更改 AWS ALB 侦听器的默认规则
- reactjs - 回调后反应表停止过滤器/排序重新加载