Компонент Popover в Naive UI предназначен для отображения всплывающего контента относительно целевого элемента. Он может использоваться для подсказок, всплывающих меню, диалоговых подсказок и других элементов интерфейса, которые требуют контекстного отображения.
Для начала необходимо импортировать компонент из библиотеки:
import { NPopover, NButton } from 'naive-ui'
Базовый пример использования:
<template>
<n-popover trigger="hover" placement="top">
<template #trigger>
<n-button>Наведи на меня</n-button>
</template>
<div>Содержимое всплывающей подсказки</div>
</n-popover>
</template>
Ключевые моменты:
hover, click,
focus).top, bottom,
left, right, а также комбинированные варианты
вроде top-start).show-arrow (boolean) Отображает стрелку,
указывающую на триггер. По умолчанию true.
trigger (string) Событие активации Popover.
Возможные значения: hover, click,
focus, manual.
placement (string) Расположение относительно элемента-триггера. Поддерживаются все стандартные позиции всплывающих элементов.
to (string | HTMLElement) Указывает, куда будет
монтироваться Popover в DOM. Можно передать селектор или объект DOM.
Если не указано, используется body.
show / v-model:show (boolean) Управление видимостью Popover программно. Позволяет открывать и закрывать Popover через реактивные переменные.
Popover поддерживает реактивное управление видимостью:
<template>
<n-popover v-model:show="visible" trigger="manual">
<template #trigger>
<n-button @click="toggle">Открыть Popover</n-button>
</template>
<div>Содержимое управляемого Popover</div>
</n-popover>
</template>
<script setup>
import { ref } from 'vue'
const visible = ref(false)
function toggle() {
visible.value = !visible.value
}
</script>
Это позволяет интегрировать Popover с внешними событиями или состояниями приложения.
Popover полностью настраиваемый:
<n-popover>
<template #trigger>
<n-button>Меню</n-button>
</template>
<template #default>
<n-list>
<n-list-item>Пункт 1</n-list-item>
<n-list-item>Пункт 2</n-list-item>
</n-list>
</template>
</n-popover>
Popover автоматически позиционируется с учётом границ окна браузера.
Если указано auto-placement, компонент подбирает
оптимальное положение, чтобы избежать обрезки контента:
<n-popover placement="auto">
<template #trigger>
<n-button>Авто-позиция</n-button>
</template>
<div>Контент подстраивается под окно</div>
</n-popover>
Свойства show-delay и hide-delay позволяют задавать задержку перед открытием и закрытием Popover:
<n-popover trigger="hover" :show-delay="500" :hide-delay="200">
<template #trigger>
<n-button>Задержка появления</n-button>
</template>
<div>Контент с задержкой</div>
</n-popover>
Это полезно для создания более плавного UX при наведение курсора.
Popover можно вкладывать один в другой или использовать внутри
таблиц, списков и модальных окон. Для этого важно использовать
уникальные слоты и контролировать trigger и
v-model:show, чтобы избежать конфликтов при наведении и
клике.
Popover поддерживает анимацию через CSS классы. По умолчанию
используется плавное появление с масштабированием и прозрачностью, но
при необходимости можно подключить кастомные анимации через
transition:
<n-popover transition-name="fade-scale">
<template #trigger>
<n-button>Анимированный Popover</n-button>
</template>
<div>Контент с кастомной анимацией</div>
</n-popover>
trigger="hover"; для контекстных меню —
trigger="click".v-model:show для сложных сценариев, где
Popover зависит от внешних событий.Popover в Naive UI — мощный инструмент для построения интерактивного и контекстного интерфейса с полной кастомизацией и простым управлением состоянием.