Tippy.js — это современная библиотека для создания всплывающих подсказок в JavaScript. Основной принцип её работы заключается в привязке подсказки к конкретному DOM-элементу. Чтобы эффективно использовать Tippy.js, необходимо понимать, как правильно получать доступ к элементам DOM и управлять ими.
Tippy.js принимает в качестве первой аргумента селектор или ссылку на элемент. Это может быть как отдельный элемент, так и коллекция элементов.
Примеры:
// Получение одного элемента по ID
const button = document.getElementById('myButton');
tippy(button, { content: 'Подсказка для кнопки' });
// Получение группы элементов по классу
const items = document.querySelectorAll('.tooltip-item');
tippy(items, { content: 'Общая подсказка для всех элементов' });
Важный момент: querySelectorAll возвращает
NodeList, который поддерживается Tippy.js напрямую, так что
можно сразу передавать его в функцию.
Если элементы создаются после загрузки страницы, необходимо
инициализировать Tippy.js после добавления элементов в DOM или
использовать делегирование событий через
tippy.delegate.
// Динамическая инициализация
const container = document.querySelector('#dynamicContainer');
const newButton = document.createElement('button');
newButton.textContent = 'Новая кнопка';
container.appendChild(newButton);
// Инициализация подсказки для нового элемента
tippy(newButton, { content: 'Динамическая подсказка' });
// Использование делегирования
tippy.delegate(document.body, {
target: '.dynamic-tooltip',
content: 'Подсказка через делегирование'
});
Делегирование позволяет автоматически применять подсказки ко всем элементам, соответствующим указанному селектору, даже если они появляются после инициализации.
При работе с множеством элементов часто требуется разная конфигурация подсказок. Можно использовать цикл или функцию для динамического определения контента.
const items = document.querySelectorAll('.tooltip-item');
items.forEach((item, index) => {
tippy(item, {
content: `Элемент №${index + 1}`,
placement: index % 2 === 0 ? 'top' : 'bottom'
});
});
Ключевые параметры для DOM-элементов:
placement — позиция подсказки относительно элемента
(top, bottom, left,
right).trigger — событие, при котором показывается подсказка
(mouseenter, click, focus).animation — анимация появления (fade,
scale, shift-away).Каждая инициализация Tippy.js возвращает объект, через который можно управлять подсказкой:
const tip = tippy(document.getElementById('myButton'), { content: 'Тест' });
// Изменение контента
tip.setContent('Обновлённая подсказка');
// Программное открытие и закрытие
tip.show();
tip.hide();
// Удаление подсказки
tip.destroy();
Для нескольких элементов tippy() возвращает массив
экземпляров. Важно хранить эти ссылки, если требуется последующее
управление подсказками.
const tooltips = tippy(document.querySelectorAll('.tooltip-item'));
tooltips.forEach((tip, i) => {
tip.setContent(`Новая подсказка для элемента ${i + 1}`);
});
Tippy.js легко интегрируется с фреймворками и библиотеками, которые управляют DOM динамически, такими как React, Vue или Vanilla JS. Основное правило — инициализация должна происходить после того, как элемент доступен в DOM.
Пример с чистым JavaScript и изменением DOM:
const listContainer = document.getElementById('list');
function addListItem(text) {
const li = document.createElement('li');
li.textContent = text;
li.classList.add('tooltip-item');
listContainer.appendChild(li);
tippy(li, { content: `Подсказка: ${text}` });
}
addListItem('Первый элемент');
addListItem('Второй элемент');
Tippy.js поддерживает использование атрибута
data-tippy-content для задания содержимого подсказки
напрямую в HTML:
<button id="btn" data-tippy-content="Подсказка через атрибут">Кнопка</button>
tippy('#btn'); // Подсказка автоматически возьмёт содержимое из data-tippy-content
Это удобно для статических элементов, не требующих динамического контента.
Подсказки Tippy.js создаются как отдельные DOM-элементы
(popper.js контейнеры), что позволяет полностью управлять
их стилями через CSS:
.tippy-box {
background-color: #333;
color: #fff;
font-size: 14px;
}
.tippy-arrow {
color: #333;
}
Использование CSS классов и theme параметра позволяет
стандартизировать стиль подсказок по всему проекту.
Эта методология работы с DOM в Tippy.js обеспечивает гибкость при создании подсказок как для статических, так и для динамически добавляемых элементов, с полным контролем над содержимым, поведением и стилем.