Компонент Flyout в библиотеке компонентов WordPress используется для создания всплывающего модального окна, содержащего произвольный контент. Он предназначен для показа более сложных элементов, чем простой текст, и похож по назначению на tooltip. Однако этот компонент всё ещё является экспериментальным, что означает возможность значительных изменений в будущем.
Подключение компонента
Для использования Flyout сначала импортируйте его вместе с другими необходимыми компонентами:
import { Button, __experimentalFlyout as Flyout, __experimentalText as Text } from '@wordpress/components';
Основной пример
Создадим простой пример с кнопкой, которая открывает и закрывает Flyout при клике. Внутри Flyout разместим элемент Text.
function FlyoutExample() {
return (
<Flyout trigger={ <Button>Показать/Скрыть контент</Button> }>
<Text>Код — это поэзия</Text>
</Flyout>
);
}
Подробное описание пропсов
Теперь рассмотрим все доступные свойства (пропсы) компонента Flyout с подробным описанием каждого.
state(опциональный)- Тип:
PopoverStateReturn - Это состояние, получаемое от
usePopoverStateбиблиотеки Reakit, используемой внутриFlyout. Позволяет контролировать и управлять состоянием видимостиFlyout.
- Тип:
label(опциональный)- Тип:
string - Этот текст описывает
Flyoutдля скринридеров, улучшая доступность.
- Тип:
animated(опциональный)- Тип:
boolean - Указывает, будет ли
Flyoutанимирован при появлении и исчезновении. - По умолчанию:
true
- Тип:
animationDuration(опциональный)- Тип:
number - Продолжительность анимации в миллисекундах. Указывает, сколько времени займет анимация открытия или закрытия
Flyout. - По умолчанию:
160
- Тип:
baseId(опциональный)- Тип:
string - Базовый ID, используемый для создания уникальных ID элементов внутри
Flyout. Это полезно при использовании несколькихFlyoutна одной странице, чтобы избежать конфликтов ID. - По умолчанию: случайный ID, генерируемый библиотекой Reakit.
- Тип:
elevation(опциональный)- Тип:
number - Задает размер тени
Flyout. Чем выше значение, тем более заметна тень. - По умолчанию:
5
- Тип:
maxWidth(опциональный)- Тип:
CSSProperties['maxWidth'] - Максимальная ширина для
Flyout. Значение может быть указано как числом (например,300для пикселей) или строкой (например,'80%'для процентов). - По умолчанию:
360
- Тип:
onVisibleChange(опциональный)- Тип:
(...args: any) => void - Функция-обработчик, вызываемая при изменении видимости
Flyout. Она получает аргументы, передаваемые внутренними событиями.
- Тип:
trigger(обязательный)- Тип:
FunctionComponentElement<any> - Элемент, который выступает в роли триггера для управления видимостью
Flyout. В примерах обычно используется кнопка, но можно использовать любой элемент, поддерживающий клики.
- Тип:
<Flyout trigger={<Button>Нажми меня</Button>}>
<Text>Привет! Это мой контент!</Text>
</Flyout>
visible(опциональный)- Тип:
boolean - Контролирует, видим ли в данный момент
Flyout. Можно использовать для явного управления состояниемFlyoutв более сложных случаях. - По умолчанию:
false
- Тип:
placement(опциональный)- Тип:
PopperPlacement - Указывает позицию, в которой будет отображаться
Flyoutотносительно элементаtrigger. Возможные значения включаютtop,bottom,left,right,autoи другие варианты позиционирования, поддерживаемые библиотекой Popper. - По умолчанию:
auto
- Тип:
Пример с изменением анимации и тени
В этом примере добавим анимацию длительностью 300 мс и увеличим тень до 10:
function CustomFlyoutExample() {
return (
<Flyout
trigger={ <Button>Открыть меню</Button> }
animated={ true }
animationDuration={ 300 }
elevation={ 10 }
>
<Text>Контент с дополнительной анимацией и тенями</Text>
</Flyout>
);
}
Пример с кастомной шириной и положением
Зададим максимальную ширину 500px и расположим Flyout сверху:
function WideFlyoutExample() {
return (
<Flyout
trigger={ <Button>Показать информацию</Button> }
maxWidth={ 500 }
placement="top"
>
<Text>Это широкий и расположенный сверху `Flyout`.</Text>
</Flyout>
);
}
Заключение
Компонент Flyout предоставляет множество возможностей для создания всплывающих окон с произвольным контентом в WordPress. Используйте свойства для кастомизации отображения, анимации и позиционирования компонента в зависимости от ваших нужд.