我有一个页面过渡,当滚动到新路由的顶部是即时的时,它不能很好地工作。我想在它自动滚动到顶部之前等待100ms。下面的代码最终根本没有滚动。有没有办法做到这一点?
export default new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'Home',
component: Home
}
],
scrollBehavior (to, from, savedPosition) {
setTimeout(() => {
return { x: 0, y: 0 }
}, 100);
}
})
7条答案
按热度按时间aor9mmx11#
现在Vue已经原生支持了,使用
scrollBehaviour
,如下所示:More here。
bvpmtnay2#
其他答案无法处理边缘情况,例如:
http://example.com/foo#bar
应该导航到页面上id
为bar
的元素。1.最后,在所有其他情况下,我们可以导航到页面的顶部。
下面是处理上述所有问题的示例代码:
1tuwyuhd3#
如果您希望在每一条路由上都执行此操作,可以在路由器的hook之前执行此操作:
如果您使用的是旧版本的vue-router,请用途:
zz2j4svz4#
如果你想等待很长时间,使用
scrollBehaviour
的异步滚动,像这样:再来点。
jljoyd4f5#
这可能不是最好的方法,但添加
document.body.scrollTop = document.documentElement.scrollTop = 0;
在路由器核心组件(在本例中为
Home
)的mounted()
函数中实现了我想要的功能。zkure5ic6#
当使用客户端路由时,我们可能希望在导航到新路由时滚动到顶部,或者像真实的页面重新加载一样保留历史条目的滚动位置。vue-router允许您实现这些,甚至更好,允许您完全自定义路由导航上的滚动行为。
注意:此功能仅在浏览器支持
history.pushState
的情况下有效。已保存职位:
了解更多信息
dzjeubhm7#
它就像这段代码一样简单: