Событие closing в библиотеке Tooltipster используется
для перехвата момента перед закрытием тултипа. Оно срабатывает
непосредственно перед тем, как тултип будет скрыт, и
предоставляет возможность повлиять на это поведение.
Ключевая особенность события — возможность отменить закрытие, если это необходимо, либо выполнить дополнительную логику (например, анимации, проверки состояния интерфейса, логирование).
В жизненном цикле Tooltipster закрытие тултипа происходит в несколько этапов:
closingafterСобытие closing — это последняя точка контроля
перед закрытием.
Событие подключается через параметр functionClosing при
инициализации Tooltipster:
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
// логика перед закрытием
}
});
Функция functionClosing принимает два аргумента:
instanceЭкземпляр Tooltipster, к которому относится тултип.
Позволяет:
Пример:
instance.open();
instance.close();
helperОбъект с дополнительной информацией:
Основные свойства:
event — событие, вызвавшее закрытие (если
применимо)origin — DOM-элемент, к которому привязан тултипПример:
function(instance, helper) {
console.log(helper.event);
console.log(helper.origin);
}
Главная возможность события closing —
предотвращение закрытия тултипа.
Для этого используется возврат false:
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
return false;
}
});
Результат:
Часто требуется отменять закрытие только при определённых условиях.
Пример: тултип не закрывается, если внутри него есть активное взаимодействие:
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
if ($('.tooltip-content:hover').length > 0) {
return false;
}
}
});
Через helper.event можно определить, что именно вызвало
закрытие:
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
if (helper.event && helper.event.type === 'click') {
console.log('Закрытие по клику');
}
}
});
Это позволяет:
Событие closing не поддерживает асинхронную отмену
напрямую (например, через Promise). Однако можно
реализовать отложенное закрытие вручную:
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
setTimeout(function() {
instance.close();
}, 2000);
return false;
}
});
Поведение:
Частый сценарий — размещение формы внутри тултипа. В этом случае важно предотвратить закрытие при взаимодействии с элементами формы.
Пример:
$('.tooltip').tooltipster({
interactive: true,
functionClosing: function(instance, helper) {
if ($(helper.event.target).closest('.tooltipster-content').length) {
return false;
}
}
});
Особенности:
interactive: trueСобытие closing можно использовать для централизованного
управления поведением тултипов:
let allowClose = false;
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
return allowClose;
}
});
Изменение состояния:
allowClose = true;
instance.close();
Событие удобно для отслеживания жизненного цикла тултипа:
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
console.log('Тултип закрывается', {
element: helper.origin,
event: helper.event
});
}
});
Для полного контроля часто используется связка событий:
functionBefore — перед открытиемfunctionReady — после открытияfunctionClosing — перед закрытиемfunctionAfter — после закрытияПример:
$('.tooltip').tooltipster({
functionReady: function() {
console.log('Открыт');
},
functionClosing: function() {
console.log('Закрывается');
},
functionAfter: function() {
console.log('Закрыт');
}
});
return falsefunctionClosing: function() {
// нет return
}
Результат:
interactive: trueЕсли тултип содержит интерактивные элементы:
interactive: false
Результат:
eventhelper.event.type
Ошибка:
helper.event может быть undefined
(например, при программном закрытии)Правильный вариант:
if (helper.event && helper.event.type === 'click') {
// безопасная проверка
}
$('.tooltip').tooltipster({
functionClosing: function() {
return confirm('Закрыть тултип?');
}
});
$('.tooltip').tooltipster({
functionClosing: function(instance, helper) {
if (!helper.event) {
return true;
}
if (helper.event.type === 'mouseleave') {
return false;
}
}
});
$('.tooltip').tooltipster({
functionClosing: function(instance) {
setTimeout(function() {
instance.close();
}, 500);
return false;
}
});
let isEditing = true;
$('.tooltip').tooltipster({
functionClosing: function() {
return !isEditing;
}
});
Событие closing срабатывает при:
mouseleave)instance.close()Это делает его универсальной точкой контроля.
Если используется кастомная анимация, событие closing
позволяет синхронизировать её:
$('.tooltip').tooltipster({
functionClosing: function(instance) {
$('.tooltip-content').fadeOut(300);
return false;
}
});
Событие closing — это:
Его правильное использование позволяет превратить тултип из простого элемента подсказки в полноценный интерактивный компонент.