NuxtLink 到哈希

Posted

技术标签:

【中文标题】NuxtLink 到哈希【英文标题】:NuxtLink to hash 【发布时间】:2022-01-17 12:52:44 【问题描述】:

我正在尝试使用 NuxtLink 滚动到锚标记。从文档中我看到我需要创建这个文件app/router.scrollBehavior.js 并将我的代码放在那里。

例如,这行得通。它在 y 轴上滚动 500px,但我真正想要的是滚动到散列。

export default function (to, from, savedPosition) 
  if (to.hash) 
    return  x: 0, y: 500 
  

活动页面

<div
  v-for="(event, i) in events"
  :id="event.id"
  :ref="event.id"
  :key="i"
>
</div>

导航组件

<NuxtLink
  v-for="item in items"
  :key="`item.id"
  :to="item.href"
>
   item.name 
</NuxtLink>

我无法让它滚动到散列。我尝试了几个选项,但似乎都没有。例如:

不起作用(我也用选择器代替 el 进行了测试)

export default function (to, from, savedPosition) 
  if (to.hash) 
    return 
      el: to.hash,
      behavior: 'smooth',
    
  

不起作用

export default function (to, from, savedPosition) 
  return new Promise((resolve, reject) => 
    if (to.hash) 
      setTimeout(() => 
        resolve(
          el: to.hash,
          behavior: 'smooth',
        )
      , 500)
    
  )

有什么想法可能是问题吗?

【问题讨论】:

我实现过一次like this。 to.hash 中是否有您所期望的内容,以及您的模板看起来如何? @kissu to.hash 看起来像这样 #world-event 模板呢? 我更新了问题并添加了事件页面和导航组件。 【参考方案1】:

好的,所以最后这对我有用。我必须安装 Vue-Scroll 和 app/router.scrollBehavior.js

import Vue from 'vue'
import VueScrollTo from 'vue-scrollto'
Vue.use(VueScrollTo)

export default function (to, from, savedPosition) 
  return new Promise((resolve, reject) => 
    setTimeout(() => 
      if (to.hash) 
        VueScrollTo.scrollTo(to.hash, 300,  easing: 'linear', offset: -60 )
      
    , 500)
  )

我将此答案用作参考 How to smoothly scroll to an element via a hash in Nuxt?,但我不得不将 setTimeOut 时间从 10 毫秒更改为 500 毫秒,因为它在我的静态页面上无法正常工作。

【讨论】:

以上是关于NuxtLink 到哈希的主要内容,如果未能解决你的问题,请参考以下文章

哈希算法从原理到实战

区块链入门到实战之区块链 – 哈希(Hash)

将键/值对添加到哈希表(嵌套在数组中,嵌套在哈希表中)

哈希表、哈希算法、一致性哈希表

一致性哈希算法

哈希表(Hash Table)与哈希算法