Система плагинов в Tippy.js позволяет расширять базовый функционал тултипов без изменения ядра библиотеки. Каждый плагин представляет собой объект с определённой структурой, который добавляет новые возможности, реагирует на жизненный цикл тултипа или изменяет поведение существующих опций.
Плагины подключаются явно, что даёт полный контроль над размером бандла и исключает неиспользуемый код.
Плагин — это объект с обязательным свойством name и
методом fn, который вызывается при инициализации
тултипа:
const myPlugin = {
name: 'myPlugin',
defaultValue: true,
fn(instance) {
return {
onShow() {
console.log('Tooltip shown');
}
};
}
};
Ключевые элементы:
name — уникальное имя плагинаdefaultValue — значение по умолчанию для
пользовательской опцииfn(instance) — функция, получающая экземпляр
тултипаНекоторые возможности в Tippy.js реализованы через встроенные плагины, которые необходимо импортировать отдельно.
Пример подключения плагина анимации:
import tippy, { animateFill } from 'tippy.js';
import 'tippy.js/dist/backdrop.css';
import 'tippy.js/animations/shift-away.css';
tippy('.btn', {
content: 'Tooltip',
animateFill: true,
plugins: [animateFill],
});
Особенности:
pluginsМожно одновременно использовать несколько плагинов:
import tippy, { animateFill, followCursor } from 'tippy.js';
tippy('.element', {
content: 'Комбинированный тултип',
animateFill: true,
followCursor: true,
plugins: [animateFill, followCursor],
});
Порядок в массиве plugins может иметь значение, если
плагины взаимодействуют между собой.
Чтобы не указывать плагины при каждом вызове tippy,
используется глобальная конфигурация:
tippy.setDefaultProps({
plugins: [animateFill],
});
После этого все тултипы автоматически получают подключённый плагин.
Плагин может добавлять собственные настройки, доступные в конфигурации:
const colorPlugin = {
name: 'colorPlugin',
defaultValue: 'blue',
fn(instance) {
return {
onCreate() {
instance.popper.style.backgroundColor = instance.props.colorPlugin;
}
};
}
};
tippy('.box', {
content: 'Цветной тултип',
colorPlugin: 'red',
plugins: [colorPlugin],
});
Важно:
name плагинаinstance.propsПлагины могут вмешиваться в различные этапы работы тултипа:
Основные хуки:
onCreate — при создании экземпляраonShow — перед показомonMount — после добавления в DOMonHide — перед скрытиемonDestroy — при удаленииПример:
const logPlugin = {
name: 'logPlugin',
fn() {
return {
onShow() {
console.log('Показ тултипа');
},
onHide() {
console.log('Скрытие тултипа');
}
};
}
};
Плагины можно добавлять динамически в зависимости от условий:
const plugins = [];
if (window.innerWidth > 768) {
plugins.push(followCursor);
}
tippy('.adaptive', {
content: 'Адаптивный тултип',
plugins,
});
Такой подход полезен для оптимизации поведения на разных устройствах.
При работе с большими приложениями плагины можно загружать по требованию:
async function initTooltip() {
const { followCursor } = await import('tippy.js');
tippy('.lazy', {
content: 'Ленивая загрузка',
followCursor: true,
plugins: [followCursor],
});
}
Это уменьшает первоначальный размер бандла.
Часто используются комбинации:
animateFill + inertia — плавные
анимацииfollowCursor + delay — интерактивные
подсказкиtippy('.combo', {
content: 'Продвинутый тултип',
inertia: true,
followCursor: 'initial',
plugins: [followCursor],
});
Для анализа работы плагина удобно:
instanceinstance.propsfn(instance) {
console.log(instance);
}
В Tippy.js плагины являются предпочтительным способом добавления функциональности. Вместо изменения ядра или создания обёрток, логика изолируется в независимых модулях, что делает код:
Такая архитектура позволяет строить сложные интерфейсы с минимальными зависимостями и высокой гибкостью настройки.