我有一个页面转换,当滚动到新路线的顶部时,它不能很好地工作。我想在它自动滚动到顶部之前等待100ms。下面的代码根本不会滚动。有没有办法做到这一点?
export default new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'Home',
component: Home
}
],
scrollBehavior (to, from, savedPosition) {
setTimeout(() => {
return { x: 0, y: 0 }
}, 100);
}
})
发布于 2017-11-07 18:13:19
如果您希望在每条路由上都执行此操作,则可以在路由器的hook之前执行此操作:
const router = new VueRouter({ ... })
router.beforeEach(function (to, from, next) {
setTimeout(() => {
window.scrollTo(0, 0);
}, 100);
next();
});
如果您使用的是较旧版本的vue-router,请使用:
router.beforeEach(function (transition) {
setTimeout(() => {
window.scrollTo(0, 0);
}, 100);
transition.next();
});
发布于 2020-05-18 02:11:47
如果您想等待很长时间,请使用scrollBehaviour
的异步滚动,如下所示:
export default new Router({
scrollBehavior() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ x: 0, y: 0 })
}, 100)
})
},
routes: [
{
path: '/',
name: 'Home',
component: Home
}
],
mode: 'history'
});
发布于 2017-03-02 07:00:35
这可能不是最好的方法,但是添加
document.body.scrollTop = document.documentElement.scrollTop = 0;
在路由的核心组件(在本例中为Home
)中,mounted()
函数实现了我想要的功能。
https://stackoverflow.com/questions/42538449
复制相似问题