В библиотеке Tippy.js singleton — это
специальная функциональность, предназначенная для управления множеством
всплывающих подсказок одновременно, при этом используя один
общий экземпляр тултипа. Она особенно полезна, когда на
странице есть большое количество элементов с подсказками, и нужно
минимизировать нагрузку на DOM и рендеринг.
При обычной инициализации Tippy.js каждый элемент с подсказкой создаёт отдельный экземпляр Tippy. Это удобно для индивидуальных подсказок, но при множестве элементов это может:
Использование singleton позволяет объединить все
подсказки в один объект, который управляет их показом и скрытием
централизованно.
Для создания singleton используется метод
tippy.createSingleton():
import tippy from 'tippy.js';
// Создаём обычные тултипы
const tooltips = tippy('.btn', {
content: 'Я подсказка!',
delay: [100, 200],
animation: 'scale'
});
// Создаём singleton
const singleton = tippy.createSingleton(tooltips, {
delay: 100,
moveTransition: 'transform 0.2s ease',
theme: 'light'
});
Ключевые моменты:
tooltips — массив отдельных тултипов, объединяемых в
singleton.delay задаёт задержку появления/скрытия для всех
тултипов через singleton.moveTransition позволяет настроить плавность
перемещения тултипа при переходе между элементами.theme задаёт общую тему для всех объединённых
подсказок.Переключение между элементами: Singleton автоматически скрывает предыдущую подсказку и показывает новую при наведении на другой элемент. Это устраняет наложение нескольких тултипов.
Общие анимации: Все подсказки в singleton используют одни и те же анимации, указанные при создании singleton, что обеспечивает визуальную консистентность.
Общий контейнер DOM: Вместо создания отдельных DOM-узлов для каждого тултипа singleton создаёт один контейнер, который перемещается и обновляет содержимое по мере необходимости.
const singleton = tippy.createSingleton(tooltips, {
delay: [200, 500] // 200 мс до показа, 500 мс до скрытия
});
[show, hide] задаёт раздельную задержку для
появления и скрытия подсказки.const singleton = tippy.createSingleton(tooltips, {
moveTransition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)'
});
const singleton = tippy.createSingleton(tooltips, {
trigger: 'mouseenter focus'
});
mouseenter,
click, focus, manual.Использование singleton снижает нагрузку на страницу и упрощает поддержку интерфейса при динамическом добавлении элементов.
setSingletonInstances.setInstances(instances) — заменяет
текущие тултипы новыми.show() / hide() —
управляет показом/скрытием активного тултипа.destroy() — удаляет singleton и
освобождает DOM-ресурсы.Пример:
singleton.show(); // показать текущий тултип
singleton.hide(); // скрыть
singleton.destroy(); // удалить singleton
singleton позволяет управлять множеством подсказок как
одним централизованным объектом, уменьшая количество
DOM-узлов, упрощая анимации и обеспечивая единообразие интерфейса. Это
делает Tippy.js эффективным инструментом для сложных интерфейсов с
большим количеством интерактивных элементов.