Версия 6.x библиотеки Tippy.js стала важным этапом эволюции, закрепив переход к более модульной, расширяемой и современной архитектуре. Основное внимание было уделено упрощению API, снижению размера бандла и более тесной интеграции с экосистемой Popper.js.
Ключевое изменение — переход на использование Popper 2 вместо устаревшей версии. Это привело к:
Tippy.js теперь выступает как тонкая надстройка над Popper, предоставляя удобный API для работы с тултипами.
В версии 6.x изменена стратегия экспорта модулей:
Пример импорта:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
Дополнительные плагины подключаются отдельно:
import tippy, { followCursor, sticky } from 'tippy.js';
Это позволяет не включать в бандл лишний код.
В 6.x внедрена полноценная система плагинов. Ранее многие функции были встроены напрямую, теперь они вынесены в отдельные модули.
Примеры встроенных плагинов:
followCursorinlinePositioningstickyanimateFillПодключение:
tippy(element, {
plugins: [followCursor],
followCursor: true,
});
Преимущества такого подхода:
В версии 6.x удалены или переработаны устаревшие параметры:
| Удалено / изменено | Замена / комментарий |
|---|---|
arrowType |
заменено на кастомизацию через CSS |
performance |
больше не требуется |
flipBehavior |
заменено на Popper modifiers |
boundary |
теперь задаётся через Popper |
Пример новой настройки через Popper:
tippy(element, {
popperOptions: {
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['bottom', 'right'],
},
},
],
},
});
Темы в 6.x стали более гибкими и ориентированными на CSS:
tippy(element, {
theme: 'light-border',
});
Основные изменения:
Пример:
.tippy-box[data-theme~='custom'] {
background-color: #333;
color: #fff;
}
Жизненный цикл тултипа был переработан. Добавлены новые хуки и изменено поведение существующих:
Основные события:
onCreateonShowonMountonShownonHideonHiddenonDestroyПример:
tippy(element, {
onShow(instance) {
console.log('Показ тултипа');
},
});
Изменения:
В 6.x улучшена работа с динамическим содержимым:
tippy(element, {
content: () => fetchData(),
});
Также появилась возможность обновления контента:
instance.setContent('Новое содержимое');
Особенности:
Добавлена поддержка виртуальных элементов — объектов, не являющихся DOM-узлами:
tippy({
getBoundingClientRect: () => ({
width: 100,
height: 20,
top: 100,
left: 100,
right: 200,
bottom: 120,
}),
}, {
content: 'Виртуальный тултип',
});
Это полезно для:
Анимации стали более управляемыми и основанными на CSS:
tippy(element, {
animation: 'scale',
});
Особенности:
Тултипы теперь создаются лениво:
Это особенно важно при работе с большим количеством элементов:
tippy('.button', {
content: 'Tooltip',
});
Даже при сотнях элементов производительность остаётся высокой.
Некоторые значения по умолчанию были пересмотрены:
delay стал более нейтральнымinteractive работает стабильнееplacement чаще корректируется автоматически через
PopperЭто уменьшает необходимость ручной настройки.
Версия 6.x значительно улучшила поддержку TypeScript:
Пример:
import tippy, { Instance } from 'tippy.js';
let instance: Instance = tippy(element);
API для работы с экземплярами стал более строгим и удобным:
const instance = tippy(element);
instance.show();
instance.hide();
instance.destroy();
Добавлены:
setPropssetContentПример:
instance.setProps({
placement: 'right',
});
Добавлена возможность использования Tippy без встроенной разметки:
import tippy from 'tippy.js/headless';
Это позволяет:
В 6.x уделено внимание доступности:
Пример:
tippy(element, {
aria: {
content: 'describedby',
},
});
Эти изменения делают Tippy.js 6.x более гибким инструментом, подходящим как для простых интерфейсов, так и для сложных UI-систем.