Библиотека Tippy.js предоставляет лёгкий и мощный способ создания всплывающих подсказок, уведомлений и алертов на веб-странице. Она построена на основе Popper.js, что гарантирует корректное позиционирование элементов относительно других элементов DOM с учётом видимой области браузера. Для уведомлений и алертов Tippy.js предлагает гибкость в настройке содержания, анимаций, триггеров и интерактивности.
Для базового всплывающего уведомления используется вызов функции
tippy() с элементом и текстом подсказки:
tippy('#notificationButton', {
content: 'Новое уведомление!',
placement: 'top', // позиционирование над элементом
animation: 'scale', // плавное появление
duration: [200, 200], // время появления и скрытия
});
Ключевые моменты:
content — текст или HTML-содержимое уведомления.placement — определяет позицию относительно целевого
элемента (top, bottom, left,
right).animation — эффект появления и скрытия, можно
использовать: 'fade', 'scale',
'shift-away', 'shift-toward'.duration — массив из двух чисел
[show, hide], указывающий продолжительность анимации.Tippy.js позволяет добавлять интерактивные элементы, такие как кнопки
подтверждения или закрытия уведомления. Для этого применяется опция
allowHTML: true:
tippy('#alertButton', {
content: `<div>
<strong>Ошибка!</strong>
<button id="closeAlert">Закрыть</button>
</div>`,
allowHTML: true,
interactive: true,
trigger: 'click',
placement: 'right',
});
Особенности:
interactive: true — позволяет взаимодействовать с
содержимым подсказки, например нажимать кнопки.trigger: 'click' — уведомление показывается при клике,
вместо стандартного mouseenter.document.addEventListener('click', (e) => {
if (e.target.id === 'closeAlert') {
e.target.closest('.tippy-box')._tippy.hide();
}
});
Для автоматического скрытия уведомлений используется опция
duration совместно с методами управления тултипом:
const tip = tippy('#autoHideButton', {
content: 'Сообщение исчезнет через 3 секунды',
trigger: 'manual',
placement: 'bottom',
hideOnClick: false,
});
tip.show();
setTimeout(() => {
tip.hide();
}, 3000);
Важно:
trigger: 'manual' позволяет управлять показом и
скрытием уведомления через методы .show() и
.hide().hideOnClick: false предотвращает закрытие при клике на
сам элемент, что удобно для временных сообщений.Стилизация уведомлений осуществляется через опцию theme
или через пользовательские классы CSS:
tippy('#customStyleButton', {
content: 'Пользовательский стиль',
theme: 'custom',
animation: 'fade',
arrow: true,
});
И соответствующая CSS-настройка:
.tippy-box[data-theme~='custom'] {
background-color: #333;
color: #fff;
border-radius: 6px;
font-size: 14px;
padding: 10px 15px;
}
.tippy-box[data-theme~='custom'][data-placement^='top'] > .tippy-arrow {
border-top-color: #333;
}
Для создания последовательных уведомлений можно использовать массивы элементов и перебор для генерации тултипов с одинаковыми настройками:
document.querySelectorAll('.notify').forEach((el) => {
tippy(el, {
content: el.dataset.message,
placement: 'top',
animation: 'scale',
duration: [150, 150],
});
});
Такой подход удобен для массовых уведомлений на страницах с таблицами или списками элементов.
Tippy.js предоставляет события для контроля жизненного цикла уведомлений:
tippy('#eventButton', {
content: 'Наблюдение за событиями',
onShow(instance) {
console.log('Уведомление показано');
},
onHide(instance) {
console.log('Уведомление скрыто');
},
onClickOutside(instance, event) {
console.log('Клик вне уведомления', event.target);
}
});
События для уведомлений:
onShow — вызывается при появлении.onShown — после завершения анимации появления.onHide — при начале скрытия.onHidden — после полного скрытия.onClickOutside — при клике вне тултипа.Tippy.js использует Popper.js, что позволяет динамически корректировать позицию уведомлений:
tippy('#positionButton', {
content: 'Я адаптируюсь к окну!',
placement: 'auto',
flip: true, // разрешает смену позиции, если элемент выходит за границы окна
offset: [0, 10], // смещение относительно цели
});
Особенности:
placement: 'auto' автоматически выбирает подходящее
направление.flip: true предотвращает перекрытие окна браузера.offset: [x, y] позволяет точно позиционировать
уведомление.Tippy.js поддерживает встроенные анимации и пользовательские CSS-анимации:
tippy('#animatedButton', {
content: 'С кастомной анимацией',
animation: 'shift-away',
duration: [300, 300],
});
Дополнительно: можно создавать свои анимации через
CSS, используя селекторы
.tippy-box[data-animation='my-animation'] и задавая
ключевые кадры @keyframes.
Tippy.js сочетает лёгкость и гибкость, что делает его мощным инструментом для реализации уведомлений и алертов на страницах любой сложности. Его возможности включают интерактивность, анимации, кастомизацию, управление временем отображения и событийную обработку, позволяя создавать как простые подсказки, так и полноценные динамические уведомления.