代码之家  ›  专栏  ›  技术社区  ›  kuceram

Vue。js滚动至同一路线的页面顶部

  •  60
  • kuceram  · 技术社区  · 8 年前

    我可以将滚动行为设置为Vue。js路由器是这样的:

    const router = new Router({
        mode: 'history',
        routes: [
            {
                path: '/',
                name: 'index',
                component: Main
            },
            {
                path: '/some-path',
                name: 'some-path',
                component: SomePath
            }
        ],
        scrollBehavior() {
            return {x: 0, y: 0}
        }
    })
    

    当你点击某个非当前页面的链接时,这一点非常有效。当我点击已经呈现的链接时,即在页脚中,什么都没有发生。Vue路由器假定不存在状态转换。在这种情况下,向上滚动的首选方式是什么?

    9 回复  |  直到 8 年前
        1
  •  27
  •   Vitaly Migunov itgeek ahmed    8 年前

    你不能通过 vue-router ,但您可以在每个 router-link .

    只需创建如下方法:

    methods: { 
      scrollToTop() {
        window.scrollTo(0,0);
      }
    }
    

    将其添加到链接:

    <router-link @click.native="$scrollToTop">
    

    如果你想在页脚之外使用它,最好将其添加到 Vue原型

    Vue.prototype.$scrollToTop = () => window.scrollTo(0,0)
    

    这不是100%的解决方案,但它是最简单的

        2
  •  2
  •   Sweet Chilly Philly    6 年前

    我无法让上述任何解决方案发挥作用,这真的令人沮丧。

    最终对我有用的是以下内容:

        const router = new Router({
            mode: 'history',
            routes: [...],
            scrollBehavior() {
                document.getElementById('app').scrollIntoView({ behavior: 'smooth' });
            }
        })
    

    我将VueJs应用安装到 #app 所以我可以肯定它是存在的,并且可以供选择。

        3
  •  0
  •   PJ.Wanderson    7 年前

    你可以利用 behavior: smooth :

        moveTo () {
          let to = this.moveToDown
            ? this.$refs.description.offsetTop - 60
            : 0
    
          window.scroll({
            top: to,
            left: 0,
            behavior: 'smooth'
          })
    
          this.moveToDown = !this.moveToDown
        }
    
        4
  •  -1
  •   Abhay    7 年前

    我找到的最佳解决方案是: https://router.vuejs.org/guide/advanced/scroll-behavior.html

    明确地:

        const router = new VueRouter({
          routes: [...],
          scrollBehavior (to, from, savedPosition) {
            return { x: 0, y: 0 }
          }
        })