Как прокрутить вниз до элемента, идентификатор которого был включен в качестве параметра запроса в Vue?

#vue.js #vuejs2 #vue-component #vue-router

#vue.js #vuejs2 #vue-компонент #vue-маршрутизатор

Вопрос:

Как я могу прокрутить страницу вниз до элемента, идентификатор которого включен в качестве параметра запроса в маршрутизаторе? Я использую маршрутизатор Vue для маршрутизации.

Ответ №1:

Вариант 1: поведение прокрутки маршрутизатора Vue

Вы можете настроить поведение прокрутки маршрутизатора Vue для автоматической прокрутки до элемента. Это поведение применяется ко всем представлениям / страницам, позволяя запрашивать любой путь маршрута.

 export default new VueRouter({
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition;
    }
    if (to.query amp;amp; to.query.id) {
      return {
        selector: '#'   to.query.id,
        behavior: 'smooth',
      }
    }
  }
})
 

демонстрация 1

Вариант 2: смотреть $route.query

Вы могли бы использовать Element.scrollIntoView() ссылку на шаблон вместе с наблюдателем $route.query для вызова этой функции прокрутки:

 <template>
  <div>
    <h1 ref="first">First</h1>
    <h1 ref="second">Second</h1>
  </div>
</template>

<script>
export default {
  methods: {
    scrollTo(name) {
      this.$refs[name]?.scrollIntoView({ behavior: 'smooth' })
    },
  },
  watch: {
    '$route.query'(query) {
      if (query.id) {
        this.scrollTo(query.id)
      }
    },
  },
}
</script>
 

демонстрация 2

Комментарии:

1. Это не работает с динамическими ссылками. Я использую следующую структуру для ссылок: :ref=»‘item’ item.id » потому что ссылки прикреплены к элементам цикла.

2. Можете ли вы сослаться на воспроизведение в Codesandbox?