Skip to content

Affix ​

Закрепляет элемент во вьюпорте при прокрутке. Полезно для липких шапок, панелей инструментов и плавающих действий.

Basic ​

Элемент становится фиксированным, когда вы прокручиваете страницу за него.

vue
<script setup>
import { VxAffix, VxButton } from 'veloxui'
</script>

<template>
  <VxAffix>
    <div class="toolbar">Sticky Toolbar</div>
  </VxAffix>
</template>

Offset ​

Задайте расстояние от края вьюпорта, после которого элемент закрепляется.

vue
<VxAffix :offset="120">
  <div>Sticks 120px from the top edge</div>
</VxAffix>

Bottom Position ​

Закрепите элемент внизу вьюпорта с помощью position="bottom".

vue
<VxAffix position="bottom" :offset="40">
  <VxButton>Always at bottom</VxButton>
</VxAffix>

Shadow ​

Добавьте shadow, чтобы показывать тень при закреплении — отлично подходит для липких шапок.

Shadow appears when fixed
vue
<VxAffix :offset="0" shadow>
  <header class="nav">My App Header</header>
</VxAffix>

Custom Fixed Class ​

Используйте fixed-class, чтобы применять свои классы при закреплении элемента. Принимает строки, массивы или объекты.

vue
<VxAffix :offset="0" fixed-class="bg-white shadow-xl border-b">
  <nav>Navigation Bar</nav>
</VxAffix>

<!-- Or with object syntax -->
<VxAffix :offset="0" :fixed-class="{ 'is-pinned': true, 'elevated': true }">
  <nav>Navigation Bar</nav>
</VxAffix>

Disabled ​

Включайте и выключайте affix с помощью disabled.

vue
<script setup>
import { ref } from 'vue'
const disabled = ref(false)
</script>

<template>
  <VxSwitch v-model="disabled" />
  <VxAffix :disabled="disabled">
    <div>Toggle me</div>
  </VxAffix>
</template>

Boundary ​

Используйте boundary, чтобы остановить affix перед наложением на другой элемент. Передайте CSS-селектор или HTMLElement. Affix сдвигается вверх, чтобы не сталкиваться с границей.

vue
<!-- Affix stops before reaching the footer -->
<VxAffix :offset="0" boundary="#page-footer">
  <aside>Sidebar Navigation</aside>
</VxAffix>

<footer id="page-footer">Footer content</footer>

Scoped Slot ​

Slot получает fixed, чтобы реагировать на состояние закрепления.

vue
<VxAffix :offset="0" shadow>
  <template #default="{ fixed }">
    <header :class="{ 'border-b': fixed }">
      <h1>{{ fixed ? 'Pinned Header' : 'Normal Header' }}</h1>
    </header>
  </template>
</VxAffix>

Custom Target ​

Ограничьте область affix прокручиваемым контейнером, передав CSS-селектор или HTMLElement в target.

vue
<div id="scroll-area" style="height: 300px; overflow: auto;">
  <div style="height: 1000px; padding: 20px;">
    <VxAffix target="#scroll-area" :offset="0">
      <div>Sticks within the scroll container</div>
    </VxAffix>
  </div>
</div>

API ​

VxAffix Props ​

PropTypeDefaultDescription
offsetnumber0Расстояние от края вьюпорта (px)
position'top' | 'bottom''top'Закрепление вверху или внизу
targetstring | HTMLElementwindowКонтейнер прокрутки
z-indexnumber100z-index при закреплении
disabledbooleanfalseОтключить affix
shadowbooleanfalseПоказывать тень при закреплении
fixed-classstring | string[] | object—Классы, применяемые при закреплении
boundarystring | HTMLElement—Остановиться до этого элемента

Events ​

EventPayloadDescription
changebooleanСостояние закрепления изменилось
scroll{ scrollTop, fixed }Прокрутка с текущим состоянием

Slots ​

SlotPropsDescription
default{ fixed: boolean }Содержимое для закрепления

Exposed ​

NameTypeDescription
update()functionПересчитать позицию
fixedRef<boolean>Текущее состояние закрепления