# Выдвижная панель
Всплывающий слой, выдвигающийся из края экрана; подходит для второстепенных действий — просмотр деталей, фильтрация и т. п. Четыре направления, управляемые размер и поведение маски.
Выдвижная панель
<template>
<div class="demo-col">
<div class="demo-row" style="gap: 12px; flex-wrap: wrap">
<LhButton type="primary" @click="open('right')">right справа</LhButton>
<LhButton @click="open('left')">left слева</LhButton>
<LhButton @click="open('top')">top сверху</LhButton>
<LhButton @click="open('bottom')">bottom снизу</LhButton>
<LhButton @click="openNoMask">Маска не закрывает</LhButton>
</div>
<LhDrawer v-model="visible" :title="title" :direction="direction" :size="size">
<p style="margin: 0 0 8px">direction задаёт направление, size — размер (число px или строка в процентах).</p>
<p class="demo-note">Кнопки внизу могут включать комбинации lockScroll / closeOnEsc и т. п.</p>
<template #footer>
<LhButton @click="visible = false">Отмена</LhButton>
<LhButton type="primary" @click="visible = false">Сохранить</LhButton>
</template>
</LhDrawer>
<LhDrawer
v-model="noMask"
title="Клик по маске не закрывает"
direction="right"
size="30%"
:mask-closable="false"
:show-close="true"
:lock-scroll="true"
:close-on-esc="false"
>
<p style="margin: 0">maskClosable=false и closeOnEsc=false: закрыть можно только кнопкой или значком закрытия.</p>
<template #footer>
<LhButton type="primary" @click="noMask = false">Закрыть</LhButton>
</template>
</LhDrawer>
</div>
</template>
<script>
export default {
data: () => ({
visible: false,
noMask: false,
title: 'Панель справа',
direction: 'right',
size: '360px',
}),
methods: {
open(dir) {
this.direction = dir
this.title = `Панель ${dir}`
this.size = dir === 'top' || dir === 'bottom' ? '30%' : '360px'
this.visible = true
},
openNoMask() {
this.noMask = true
},
},
}
</script>
# Props
| Проп | Описание | Тип | По умолчанию |
|---|---|---|---|
| v-model | Видимость (контролируемый prop modelValue) | boolean | false |
| title | Заголовок | string | — |
| direction | Направление | 'right' \| 'left' \| 'top' \| 'bottom' | 'right' |
| size | Размер: число — px, строка поддерживает проценты | string \| number | — |
| maskClosable | Закрытие по клику на маску | boolean | true |
| showClose | Показывать кнопку закрытия | boolean | true |
| teleportTarget | Целевой узел монтирования всплывающего слоя (селектор или элемент; по умолчанию body; в 2.7 нет Teleport — реализовано перемещением узла) | string \| HTMLElement | — |
| lockScroll | Блокировка прокрутки страницы | boolean | true |
| closeOnEsc | Закрытие по Esc | boolean | true |
| themeVars | Переменные темы на уровне компонента; переопределяют конфигурацию ConfigProvider | Record<string, string> | — |
| bgPattern | Фоновый узор на уровне компонента; переопределяет конфигурацию ConfigProvider | string | — |
| sx | Сокращённая запись разметки через sx (применяется к панели) | — | — |
# Slots
| Слот | Описание |
|---|---|
| header | Область заголовка (по умолчанию берётся из prop title) |
| default | Основной текст панели |
| footer | Область кнопок внизу |
Copyright © 2024-2026 FengMo WenXue