Tippy.js предоставляет гибкие возможности для работы с динамическим контентом, что особенно важно при создании интерактивных интерфейсов. Динамическое содержимое позволяет изменять текст или HTML подсказки в реальном времени, основываясь на данных пользователя, событиях или изменениях DOM.
Вместо передачи статической строки в опцию content,
можно использовать функцию, которая возвращает строку или элемент DOM.
Это позволяет обновлять содержимое при каждом отображении тултипа:
tippy('#dynamicButton', {
content: (reference) => {
return `Текущее время: ${new Date().toLocaleTimeString()}`;
},
allowHTML: true,
});
Ключевые моменты:
reference ссылается на элемент, к которому
привязан тултип.allowHTML: true необходима для работы с
HTML-контентом, иначе любые теги будут экранированы.Tippy.js позволяет менять контент уже созданного тултипа через метод
setContent:
const tooltip = tippy('#updateButton', {
content: 'Изначальный текст',
});
document.querySelector('#updateContent').addEventListener('click', () => {
tooltip[0].setContent('Обновлённый текст с новым значением');
});
Особенности:
tooltip возвращает массив экземпляров Tippy, даже если
элементов один.setContent может принимать как текст, так и
HTML-элемент.Для асинхронных сценариев полезно использовать промисы. Например, загрузка подсказки через API:
tippy('#asyncButton', {
content: 'Загрузка...',
onShow(instance) {
fetch('https://api.example.com/tooltip')
.then(res => res.text())
.then(data => instance.setContent(data))
.catch(() => instance.setContent('Ошибка загрузки'));
},
});
Рекомендации:
onShow вызывается при каждом открытии тултипа, что
позволяет получать свежие данные.Tippy.js позволяет вставлять элементы DOM, а не только строки:
const contentElement = document.createElement('div');
contentElement.innerHTML = `<strong>Интерактивный контент</strong>`;
tippy('#htmlButton', {
content: contentElement,
allowHTML: true,
});
Примечания:
Контент тултипа может зависеть от состояния элемента:
tippy('.statusButton', {
content: (reference) => {
return reference.dataset.status === 'active' ? 'Активно' : 'Неактивно';
}
});
Особенности:
data-* атрибутов упрощает хранение
состояния элемента.Динамическое содержимое легко интегрируется с интерактивными тултипами:
tippy('#interactiveButton', {
content: () => {
const div = document.createElement('div');
div.innerHTML = `<button id="innerButton">Нажми меня</button>`;
div.querySelector('#innerButton').addEventListener('click', () => alert('Кнопка нажата'));
return div;
},
interactive: true,
allowHTML: true,
});
Особенности:
interactive: true позволяет пользователю
взаимодействовать с элементами внутри тултипа.allowHTML только при
необходимости — повышает безопасность и предотвращает
инъекции.appendTo: document.body для
корректного отображения вне родительских контейнеров.Динамическое содержимое в Tippy.js открывает возможности для сложных интерфейсов: обновляемые подсказки, интерактивные элементы, данные с сервера и адаптация под состояние элемента. Комбинация функций контента, методов обновления и интерактивных опций обеспечивает полный контроль над поведением тултипов в реальном времени.