Javascript Vue.js,如何通过ID滚动到锚点而不导航到路线

Javascript Vue.js,如何通过ID滚动到锚点而不导航到路线,javascript,vue.js,scroll,vue-router,anchor,Javascript,Vue.js,Scroll,Vue Router,Anchor,我有Vue+Vue路由器,用于在应用程序中的页面中导航,但我还需要能够在无需路由的情况下移动到ID/锚点。目前,路由器总是激活URL并将其更改为具有ID名称的新页面,而不是移动到同一页面上的ID <a href="#example">link</a> 单击链接时,页面会滚动到ID,但随后会转到不存在的页面http://localhost:8080/#/example 我真的不知道如何在不被vue router劫持的情况下使用锚/ID。如果您在同一页面

我有Vue+Vue路由器,用于在应用程序中的页面中导航,但我还需要能够在无需路由的情况下移动到ID/锚点。目前,路由器总是激活URL并将其更改为具有ID名称的新页面,而不是移动到同一页面上的ID

<a href="#example">link</a>
单击链接时,页面会滚动到ID,但随后会转到不存在的页面
http://localhost:8080/#/example


我真的不知道如何在不被vue router劫持的情况下使用锚/ID。

如果您在同一页面上,您可以创建一个方法并使用它

下面是一个示例函数:

scrollToContent(){
window.scrollTo(
0,
document.getElementById(“内容”).getBoundingClientRect().y+
窗口滚动-
120
);
},

这并不会阻止路由,滚动条本身目前可以工作,但它仍然可以路由。我会在每次导航前尝试
导航保护,检查您的路由集合,确定它尝试导航到的路由无效,如果没有,请调用
下一步(false)
在防护装置内部。@dexygen我在中找到了导航防护装置,它工作了一半!它确实阻止发送到空白页,但是它仍然会更改url,尽管文档称它将停止:“并且可以选择返回以下任何值:-false:取消当前导航。如果浏览器url已更改(用户手动更改或通过“后退”按钮更改),它将重置为“从”路由的url。”我的beforeach:
router.beforeach((to,from)=>{if(!to.matched.length)return false}}})
最糟糕的情况是,您可以使用历史记录/推送状态来还原URL,但您可能会认为有更好的方法我的另一个想法是找到一种替代使用createWebHashHistory()的方法,因为锚点本身会在URL中放置哈希
const router = createRouter({
  history: createWebHashHistory(),
  routes,
  scrollBehavior (to) {
    if (to.hash) {
      return {
        selector: to.hash
      }
    }
  }
})