Tippy.js предоставляет мощную систему плагинов, позволяющую расширять функциональность всплывающих подсказок. Плагины — это объекты, которые могут влиять на жизненный цикл тултипа, добавлять новые опции или модифицировать поведение существующих. Каждый плагин должен соответствовать определённой структуре и содержать набор ключевых методов и свойств.
Базовый плагин в Tippy.js представляет собой объект с обязательными и опциональными полями:
const myPlugin = {
name: 'myPlugin', // уникальное имя плагина
defaultValue: false, // значение по умолчанию для опции
fn(instance) { // функция, вызываемая при инициализации тултипа
return {
onCreate() {}, // вызывается при создании тултипа
onShow() {}, // вызывается при показе
onHide() {}, // вызывается при скрытии
onDestroy() {} // вызывается при уничтожении
};
}
};
Tippy.js предоставляет несколько точек вмешательства, на которых плагин может выполнять собственные действия:
Каждый из этих методов получает ссылку на объект тултипа
instance, через который можно управлять содержимым,
состоянием и DOM-структурой.
Плагины могут определять свои собственные опции, которые будут
доступны при инициализации тултипа. Для этого используется поле
defaultValue и объект instance.props:
const highlightPlugin = {
name: 'highlight',
defaultValue: 'yellow',
fn(instance) {
return {
onShow() {
instance.popper.querySelector('.tippy-content').style.backgroundColor = instance.props.highlight;
}
};
}
};
tippy('.btn', {
content: 'Подсказка',
plugins: [highlightPlugin],
highlight: 'lightgreen'
});
В этом примере добавлена опция highlight, позволяющая
менять цвет фона подсказки динамически.
Tippy.js поддерживает одновременную работу нескольких плагинов. Каждый плагин получает полный объект тултипа и может взаимодействовать с его свойствами и методами. Важно следить за конфликтами, особенно если плагины изменяют один и тот же DOM-элемент или состояние.
const pluginA = {
name: 'pluginA',
fn(instance) {
return {
onShow() {
console.log('Plugin A activated');
}
};
}
};
const pluginB = {
name: 'pluginB',
fn(instance) {
return {
onShow() {
console.log('Plugin B activated');
}
};
}
};
tippy('.btn', {
content: 'Подсказка',
plugins: [pluginA, pluginB]
});
При показе тултипа будут вызваны оба метода onShow, что
обеспечивает совместимость и расширяемость.
Плагины можно регистрировать глобально или передавать локально для
конкретного тултипа. Для глобальной регистрации используется метод
tippy.setDefaultProps:
tippy.setDefaultProps({
plugins: [highlightPlugin]
});
После этого все создаваемые тултипы будут автоматически использовать
этот плагин без необходимости указывать его в каждом вызове
tippy().
Создание собственных плагинов в Tippy.js позволяет легко адаптировать подсказки под любые требования интерфейса, расширяя их функциональность без изменения исходного кода библиотеки. Это мощный инструмент для построения гибких и интерактивных интерфейсов.