Vue路由器导航或滚动到锚点(#锚点)

Posted

技术标签:

【中文标题】Vue路由器导航或滚动到锚点(#锚点)【英文标题】:Vue Router navigate or scroll to anchors (# anchors) 【发布时间】:2021-03-20 01:48:20 【问题描述】:

我正在为vue-router 不滚动/导航到锚标签而苦苦挣扎(例如:#anchor)。我在 Stack Overflow 上阅读了各种解决方案,但到目前为止都没有。

请在下面找到我现在正在使用的代码,它不起作用:

main.js

const router = createRouter(
    history: createWebHistory(),
    routes: [
        
            path: "/docs/1.0/:title",
            component: Content,
            name: "docs"
        
    ],
    scrollBehavior(to, from, savedPosition) 
        if (savedPosition) 
            return savedPosition;
        
        if (to.hash) 
            return  selector: to.hash ;
        
        return  x: 0, y: 0 ;
    ,
);

Content.vue(父组件)

<template>
  <base-section
    v-for="entry in $store.state.entries"
    :key="entry.title"
    lang="lang-markup"
    :title="entry.title"
  >
    <template v-slot:sectionId>
      <div :id="slugify(entry.title)"></div>
    </template>

    <template v-if="entry.content" v-slot:content>
      <span v-html="entry.content"></span>
    </template>
    <template v-slot:examples>
      <div v-html="entry.examples"></div>
    </template>
    <template v-slot:code>
       entry.code 
    </template>
  </base-section>
</template>

SectionMenu.vue(子组件)

<span v-for="item in $store.state.entries" :key="item.title">
  <router-link
    :to="name:'docs', hash:'#'+slugify(item.title)"
    class="mx-1 btn btn-primary"
  > item.title </router-link>
</span>

我也尝试了不同的方法,但也没有奏效。这就是方法:

<button @click.prevent="navigate(item.title)">item.title</button>
navigate(route)
  this.$router.push(name:'docs', hash:'#'+this.slugify(route))
,

你知道我做错了什么吗?

PS:我使用的是 VUE 3 (vue CLI 4.5.8)

【问题讨论】:

【参考方案1】:

在 Vue Router 4 中,从 scrollBehavior() 返回的对象的格式与 Vue Router 3 中的不同。特别是,对象的 selector 属性现在命名为 el,如 @ 所示987654321@:

const router = createRouter(
  scrollBehavior(to, from, savedPosition) 
    if (to.hash) 
      // BEFORE:
      // return  selector: to.hash 

      return  el: to.hash 
    
  ,
)

demo

【讨论】:

以上是关于Vue路由器导航或滚动到锚点(#锚点)的主要内容,如果未能解决你的问题,请参考以下文章

Vue路由scrollBehavior滚动行为控制锚点

Vue Router-更改滚动中的锚点

滚动到锚点,同时保持散列

vue2.0中怎么做锚点定位

iview 锚点爬坑 && vue 锚点

如何检测自动滚动到锚点?