Анимация во всплывающих подсказках управляет не только визуальной привлекательностью, но и восприятием интерфейса. В библиотеке Tippy.js анимация реализуется через комбинацию CSS-переходов и параметров конфигурации, которые задаются при инициализации тултипа.
По умолчанию используется простая анимация появления/исчезновения, но библиотека предоставляет гибкие инструменты для настройки:
animationОпределяет тип анимации, применяемой к тултипу. Значение — строка, соответствующая имени CSS-анимации.
tippy('.btn', {
content: 'Подсказка',
animation: 'scale',
});
Стандартные значения:
fade — плавное появление (по умолчанию)scale — масштабирование с прозрачностьюshift-away — сдвиг с уменьшениемshift-toward — сдвиг навстречуperspective — эффект перспективыПри использовании темы (theme) визуальный результат
может изменяться, так как стили анимации зависят от CSS.
Отключение анимации:
tippy('.btn', {
animation: false,
});
durationЗадает длительность анимации в миллисекундах. Может быть:
tippy('.btn', {
duration: 500,
});
Раздельная настройка:
tippy('.btn', {
duration: [300, 1000], // появление — 300мс, исчезновение — 1000мс
});
Особенности:
delayКонтролирует задержку перед началом анимации.
tippy('.btn', {
delay: 200,
});
Раздельная настройка:
tippy('.btn', {
delay: [100, 300], // задержка перед показом и скрытием
});
Типичные сценарии:
inertiaДобавляет эффект “инерции” при появлении тултипа. Это визуально делает движение более естественным за счёт изменения кривой ускорения.
tippy('.btn', {
inertia: true,
});
Особенности:
scale,
shift-*)transition-timing-functionmoveTransitionОтвечает за анимацию перемещения тултипа при изменении позиции (например, при прокрутке или изменении размеров окна).
tippy('.btn', {
moveTransition: 'transform 0.2s ease-out',
});
Без этого параметра тултип “прыгает” в новую позицию. С ним — плавно перемещается.
Tippy.js активно использует CSS, поэтому любые анимации можно переопределить или создать собственные.
Пример кастомной анимации:
.tippy-box[data-animation='custom-fade'] {
opacity: 0;
transform: translateY(10px);
transition: all 0.3s ease;
}
.tippy-box[data-state='visible'][data-animation='custom-fade'] {
opacity: 1;
transform: translateY(0);
}
Подключение:
tippy('.btn', {
animation: 'custom-fade',
});
data-state)Tippy.js управляет состоянием тултипа через атрибуты:
data-state="hidden"data-state="visible"Это позволяет точно контролировать фазы анимации через CSS.
Пример:
.tippy-box[data-state='hidden'] {
opacity: 0;
}
.tippy-box[data-state='visible'] {
opacity: 1;
}
Качество анимации сильно зависит от функции сглаживания
(easing):
ease — стандартное плавное движениеease-in — ускорение в началеease-out — замедление в концеcubic-bezier(...) — кастомная криваяПример:
transition: transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
Такие кривые часто используются для создания “живого” интерфейса.
hideOnClick и влияние на анимациюХотя параметр напрямую не относится к анимации, он влияет на момент её запуска:
tippy('.btn', {
hideOnClick: true,
});
При клике тултип начинает анимацию скрытия. В сочетании с
delay и duration можно контролировать
поведение интерфейса при взаимодействии.
При interactive: true тултип остаётся открытым при
наведении на него. Это влияет на логику анимации:
tippy('.btn', {
interactive: true,
delay: [100, 200],
});
Важно учитывать:
Анимации влияют на производительность, особенно при большом количестве тултипов.
Рекомендации:
transform и opacity вместо
top/leftПример оптимальной анимации:
transition: opacity 0.2s ease, transform 0.2s ease;
Гибкость Tippy.js раскрывается при сочетании нескольких параметров:
tippy('.btn', {
animation: 'scale',
duration: [200, 150],
delay: [100, 0],
inertia: true,
});
Результат:
Если указано animation: false, библиотека:
Это полезно:
instance.setProps({
animation: 'shift-away',
});
Позволяет менять поведение тултипа в зависимости от контекста.
Tippy.js можно интегрировать с:
При этом стандартные параметры могут быть отключены:
tippy('.btn', {
animation: false,
onShow(instance) {
// кастомная анимация
},
});
duration > 1000)delay и
interactiveМинималистичная анимация:
{
animation: 'fade',
duration: 150
}
Акцентированная:
{
animation: 'scale',
duration: [300, 200],
inertia: true
}
Без отвлечения:
{
animation: false
}
theme)Анимация может выглядеть по-разному в зависимости от темы:
tippy('.btn', {
theme: 'light',
animation: 'shift-away',
});
Темы задают базовые стили, включая:
Анимация тесно связана с жизненным циклом тултипа:
onShowonHideonMountonHiddenПример:
tippy('.btn', {
onShow(instance) {
console.log('Начало анимации');
},
onHidden(instance) {
console.log('Анимация завершена');
},
});
Позволяет синхронизировать другие действия с визуальными эффектами.
Грамотная настройка анимации в Tippy.js — это баланс между:
Правильное использование параметров animation,
duration, delay и CSS позволяет добиться
профессионального уровня взаимодействия без перегрузки интерфейса.