Skip to content
API 风格:

Якорь ​

Якорная навигация внутри страницы с подсветкой текущего раздела при прокрутке. Семантический <nav> + aria-current="location".

Базовое использование ​

Базовое использование
vue
<script setup>
const anchorItems = [
  { id: 'sec-1', title: 'Раздел 1' },
  { id: 'sec-2', title: 'Раздел 2', children: [{ id: 'sec-2-1', title: 'Раздел 2.1' }] },
]
</script>

<template>
  <LhAnchor :items="anchorItems" />
</template>
vue
<script>
export default {
  data() {
    return {
      anchorItems: [
        { id: 'sec-1', title: 'Раздел 1' },
        { id: 'sec-2', title: 'Раздел 2', children: [{ id: 'sec-2-1', title: 'Раздел 2.1' }] },
      ],
    }
  },
}
</script>

<template>
  <LhAnchor :items="anchorItems" />
</template>

Горизонтальное расположение и параметры прокрутки ​

direction="horizontal" переключает на горизонтальное расположение; smooth отключает плавную прокрутку; offset компенсирует смещение области якоря относительно верха контейнера прокрутки; target отслеживает указанный контейнер прокрутки (по умолчанию window).

Горизонтальные якоря
vue
<script setup>
const anchorItems = [
  { id: 'sec-1', title: 'Раздел 1' },
  { id: 'sec-2', title: 'Раздел 2' },
]
</script>

<template>
  <!-- Горизонтальные якоря -->
  <LhAnchor
    :items="anchorItems"
    direction="horizontal"
    :offset="8"
    :smooth="true"
  />
</template>
vue
<script>
export default {
  data() {
    return {
      anchorItems: [
        { id: 'sec-1', title: 'Раздел 1' },
        { id: 'sec-2', title: 'Раздел 2' },
      ],
    }
  },
}
</script>

<template>
  <!-- Горизонтальные якоря -->
  <LhAnchor
    :items="anchorItems"
    direction="horizontal"
    :offset="8"
    :smooth="true"
  />
</template>

API ​

LhAnchor Props ​

СвойствоОписаниеТипПо умолчанию
itemsДанные якорей (поддерживаются дочерние уровни)[LhAnchorItem](#type-LhAnchorItem)[]—
targetКонтейнер прокрутки (селектор или элемент; по умолчанию window)string | HTMLElement—
offsetСмещение области якоря относительно верха контейнера прокрутки (используется для определения активного якоря)number0
directionНаправление расположения"vertical" | "horizontal"'vertical'
smoothПлавная прокруткаbooleantrue
sxСокращённые свойства компоновки sxLhSxProps—

Events ​

СобытиеОписаниеПараметр обратного вызова
changeСрабатывает при смене активного якоря (при прокрутке или клике по якорю)(id: string)
clickСрабатывает при клике по ссылке-якорю (срабатывает до выполнения прокрутки)(event: MouseEvent, id: string)

LhAnchorItem ​

ПолеОписаниеТип
idid целевого элементаstring
titleОтображаемый текстstring
childrenДочерние якоряLhAnchorItem[]

Доступность ​

  • Контейнер — семантический <nav> с aria-label; текущий якорь помечается aria-current="location"
  • Ссылки — настоящие <a href="#id"> (переход работает и без JS, а при клике дополняется плавной прокруткой)
  • Плавная прокрутка автоматически сменяется мгновенным переходом при prefers-reduced-motion: reduce

Типы ​

TypeScript-типы, экспортируемые этим компонентом (извлечены автоматически из packages/components/anchor/src/types.ts и исходников @lh-ui/share/core/*; раскройте нужный пункт, чтобы увидеть полное определение; описания свойств — в таблице Props выше):

LhAnchorProps
ts
export interface LhAnchorProps {
  /** Данные якорей (поддерживаются дочерние уровни) */
  items: LhAnchorItem[]
  /** Контейнер прокрутки (селектор или элемент; по умолчанию window) */
  target?: string | HTMLElement
  /** Смещение области якоря относительно верха контейнера прокрутки (используется для определения активного якоря) */
  offset?: number
  /** Направление расположения */
  direction?: 'vertical' | 'horizontal'
  /** Плавная прокрутка */
  smooth?: boolean
  /** Сокращённые свойства компоновки sx */
  sx?: LhSxProps
}
LhFlatAnchorItem (из @lh-ui/share/core/anchor)
ts
/** Плоский элемент якоря (для рендеринга) */
export interface LhFlatAnchorItem {
  id: string
  title: string
  level: number
}
LhAnchorItem (из @lh-ui/share/core/anchor)
ts
/** Элемент якоря */
export interface LhAnchorItem {
  /** id целевого элемента */
  id: string
  /** Отображаемый текст */
  title: string
  /** Дочерние якоря */
  children?: LhAnchorItem[]
}

Красота традиций — основа кода