Tippy.js — мощная библиотека для создания тултипов и всплывающих подсказок в веб-приложениях на JavaScript. Одним из ключевых инструментов, упрощающих повторное использование конфигураций, является система пресетов (presets). Пресеты позволяют задавать стандартные настройки для тултипов и применять их к множеству элементов без дублирования кода.
В Tippy.js пресет — это объект конфигурации, который определяет
поведение тултипа: его позиционирование, анимацию, триггеры, задержки и
другие параметры. Создание пресета осуществляется через функцию
tippy.setDefaultProps() или при использовании кастомных
экземпляров tippy.createSingleton().
Пример базового пресета:
tippy.setDefaultProps({
placement: 'top',
animation: 'fade',
delay: [100, 300],
theme: 'light-border'
});
В этом примере:
placement: 'top' задаёт расположение тултипа над
элементом.animation: 'fade' активирует плавное появление.delay: [100, 300] определяет задержку появления и
скрытия.theme: 'light-border' назначает светлую тему с
границей.После установки таких настроек все последующие тултипы, созданные с
помощью tippy(targets), будут использовать эти значения по
умолчанию.
Для удобства можно создавать именованные пресеты, которые позволяют различным элементам страницы использовать разные конфигурации.
Пример создания именованного пресета:
const darkTooltip = tippy.createSingleton([], {
placement: 'bottom',
theme: 'dark',
animation: 'scale',
delay: [0, 200],
});
Особенности подхода:
createSingleton() позволяет объединять несколько
тултипов с одинаковым пресетом, экономя ресурсы.placement, theme,
animation и delay можно переопределять
индивидуально при необходимости.Tippy.js поддерживает динамическое формирование пресетов через функции. Это позволяет вычислять параметры на основе данных элемента.
Пример динамического пресета:
tippy(document.querySelectorAll('.info'), {
content: (reference) => `Информация о ${reference.dataset.name}`,
placement: (reference) => reference.dataset.position || 'top',
animation: 'shift-away',
});
Преимущества такого подхода:
placement) зависит от атрибута
data-position.Tippy.js позволяет комбинировать пресеты с помощью базового объекта настроек и последующего их переопределения:
const basePreset = {
animation: 'fade',
delay: [50, 200],
theme: 'light'
};
const specialPreset = {
...basePreset,
placement: 'right',
theme: 'light-border'
};
tippy('.button', specialPreset);
Здесь specialPreset расширяет basePreset,
переопределяя только необходимые параметры (placement и
theme). Это повышает удобство и снижает количество
повторяющихся настроек.
createSingleton или общий базовый объект для нескольких
тултипов.Пресеты особенно полезны для крупных приложений с большим количеством интерактивных элементов:
Использование пресетов обеспечивает единообразие интерфейса и упрощает поддержку кода, позволяя вносить глобальные изменения в поведение тултипов, изменяя только пресет, а не каждый элемент отдельно.