Tooltipster — это мощная библиотека для создания всплывающих подсказок на элементах веб-страницы. Одной из её ключевых возможностей является поддержка асинхронного контента, что позволяет загружать данные динамически, без перезагрузки страницы, и отображать их в подсказках. Это особенно важно при работе с большими объемами информации или данными с серверной стороны.
Чтобы использовать асинхронную загрузку, необходимо определить
functionBefore и update в конфигурации
Tooltipster. Основная идея заключается в том, что перед показом
подсказки библиотека вызывает функцию, где можно запросить данные, а
затем обновить содержимое тултипа после получения ответа.
$('.tooltip-element').tooltipster({
content: 'Загрузка...',
functionBefore: function(instance, helper) {
if (instance.content() === 'Загрузка...') {
$.ajax({
url: '/get-tooltip-data',
method: 'GET',
data: { id: $(helper.origin).data('id') },
success: function(data) {
instance.content(data);
},
error: function() {
instance.content('Ошибка загрузки данных');
}
});
}
}
});
Разбор ключевых моментов:
content: 'Загрузка...' — начальный текст, который
отображается до получения ответа сервера.functionBefore вызывается каждый раз перед показом
тултипа. Здесь проверяется, загружены ли данные. Если нет — выполняется
AJAX-запрос.instance.content(data) — метод, который обновляет
содержимое подсказки после успешного получения данных.error позволяет показывать
пользователю сообщение о неудачной загрузке.Tooltipster поддерживает объект $.Deferred(), что
позволяет управлять асинхронностью более гибко и предотвращает
многократные запросы при повторных наведениях на элемент.
$('.tooltip-element').tooltipster({
content: 'Загрузка...',
functionBefore: function(instance, helper) {
if (!instance.data('loaded')) {
var dfd = $.Deferred();
$.ajax({
url: '/get-tooltip-data',
method: 'GET',
data: { id: $(helper.origin).data('id') },
success: function(data) {
instance.content(data);
instance.data('loaded', true);
dfd.resolve();
},
error: function() {
instance.content('Ошибка загрузки данных');
dfd.reject();
}
});
return dfd.promise();
}
}
});
Пояснения:
$.Deferred() позволяет Tooltipster дождаться завершения
асинхронного запроса перед отображением подсказки.instance.data('loaded', true) сохраняет состояние
загрузки, предотвращая повторные AJAX-запросы при повторных наведениях
на элемент.dfd.resolve() и dfd.reject() управляют
успешным и ошибочным завершением запроса, гарантируя корректное
отображение подсказки.Tooltipster предоставляет метод instance.content() для
динамического изменения содержимого уже отображенной
подсказки. Это полезно, если данные меняются после
первоначальной загрузки.
var instance = $('.tooltip-element').tooltipster().tooltipster('instance');
setTimeout(function() {
instance.content('Обновлённое содержимое через 5 секунд');
}, 5000);
content() мгновенно
обновляет его содержимое.Tooltipster поддерживает HTML-содержимое, что открывает возможность использовать шаблонизаторы (Handlebars, Mustache, EJS) для формирования подсказки на лету.
$('.tooltip-element').tooltipster({
content: 'Загрузка...',
functionBefore: function(instance, helper) {
if (!instance.data('loaded')) {
$.get('/tooltip-template?id=' + $(helper.origin).data('id'), function(template) {
var html = Mustache.render(template, { name: $(helper.origin).text() });
instance.content(html);
instance.data('loaded', true);
});
}
},
contentAsHTML: true
});
contentAsHTML: true разрешает отображение HTML внутри
тултипа.Для оптимизации производительности можно комбинировать асинхронную загрузку с кэшированием данных:
var tooltipCache = {};
$('.tooltip-element').tooltipster({
content: 'Загрузка...',
functionBefore: function(instance, helper) {
var id = $(helper.origin).data('id');
if (tooltipCache[id]) {
instance.content(tooltipCache[id]);
} else {
$.get('/get-tooltip-data?id=' + id, function(data) {
tooltipCache[id] = data;
instance.content(data);
});
}
}
});
tooltipCache хранит уже загруженные данные, чтобы не
выполнять повторные запросы к серверу.functionBefore для
контроля момента загрузки данных.instance.content() для динамических изменений
после отображения.Асинхронная загрузка контента делает Tooltipster гибким инструментом для интерактивных веб-интерфейсов, позволяя интегрировать его с любыми внешними источниками данных без задержек и перезагрузок страницы.