点击nuxtjs路由时,跳转到目标页面时,会出现在最底部。期望出现在最顶部。局部和全局的设置

1 默认情况下,从当前页面切换至目标页面时,Nuxt.js 会让目标页面滚动至顶部。

但是在嵌套子路由的场景下,Nuxt.js 会保持当前页面的滚动位置,除非在子路由的页面组件中将 scrollToTop 设置为 true。

<template>
  <h1>子页面组件</h1>
</template>

<script>
export default {
  scrollToTop: true
}
</script>

全局添加

在这里插入图片描述
创建路由器实例时,可以提供以下scrollBehavior函数:

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    // return desired position
  }
})

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

该函数可以返回一个滚动位置对象。对象可以是以下形式:

{ x: number, y: number }
{ selector: string, offset? : { x: number, y: number }}(仅在 2.6.0+ 中支持偏移)
如果返回虚假值或空对象,则不会发生滚动。

例如:

scrollBehavior (to, from, savedPosition) {
return { x: 0, y: 0 }
}
这只会使页面滚动到所有路线导航的顶部。

使用后退/前进按钮导航时,返回savedPosition将导致类似本机的行为:

scrollBehavior (to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition
  } else {
    return { x: 0, y: 0 }
  }
}

这是官网给的方法但是有bug在里面,经过调试,发现得通过异步来处理
故全局添加的最终代码是

在根目录添加app文件夹,里面添加 router.scrollBehavior.js 把以下代码放进去即可。

export default function (_to, _from, savedPosition) {
  return new Promise((resolve) => {
    setTimeout(() => resolve(savedPosition || { x: 0, y: 0 }), 180)
  })
}

参考官网链接
https://nuxtjs.org/docs/configuration-glossary/configuration-router/#scrollbehavior

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值