nuxt-link: перенаправить на тот же якорь с хешем

Я использую <nuxt-link> компонент в моем приложении Nuxt, и у меня возникла следующая проблема:

  • Когда я впервые нажимаю на ссылку, все работает нормально, при необходимости страница меняется и привязка работает отлично
  • Однако, если я немного прокручиваю страницу и снова нажимаю ссылку, ничего не происходит, потому что URL-адрес уже присутствует в навигационной панели браузера, как я предполагаю.

Как я мог переписать это поведение, чтобы при нажатии на nuxt-link, он прокручивается до нужного раздела независимо от того, что я нажимал раньше? (Без обновления страницы)

Вот что мой nuxt-link похоже

<nuxt-link :to="{ path: localePath('/'), hash: '#homepage' }"
>
  <span>Homepage</span>
</nuxt-link>

0 ответов

Я считаю, что вы сможете добавить обработчик кликов к своей nuxt-ссылке.

<nuxt-link
  :to="{ path: localePath('/'), hash: '#homepage' }"
  @click.native="scroll"
>
  Homepage
</nuxt-link>

(не уверен в @click.native, если это не сработает, просто попробуйте @click)

А затем в ваших методах:

methods: {
    scroll() {
      // your scroll function, probably reading document.documentElement.scrollTop or similar
    // if necessary check this.$route if the hash is already present, if so only do it in that case...
    },
}

Надеюсь, это даст вам возможность начать?! Ура

Должен работать с этой функцией, привязанной к click.native событие, предложенное @Merc.

handleScroll(anchorId: string): void {
    if (this.$route.hash) {
      const anchor = document.querySelector(`#${anchorId}`)

      // Check if the anchor has been found
      if (anchor) {
        window.scrollTo({
          // Scroll so that the anchor is at the top of the view
          top: anchor.getBoundingClientRect().top + window.pageYOffset
        })
      }
    }
  }
Другие вопросы по тегам