Событие close используется для отслеживания момента
закрытия tooltip’а. Оно позволяет выполнять дополнительные действия
после скрытия подсказки, например, очищать ресурсы, обновлять интерфейс
или логировать пользовательское поведение.
Событие close срабатывает в момент, когда tooltip
полностью закрыт, независимо от причины закрытия:
Важно понимать, что это событие происходит после завершения процесса закрытия, включая анимации.
Tooltipster предоставляет несколько способов подписки на событие
close.
$('.tooltip').tooltipster({
functionAfter: function(instance, helper) {
console.log('Tooltip закрыт');
}
});
Метод functionAfter является стандартным способом
обработки закрытия.
$('.tooltip').on('close.tooltipster', function(event) {
console.log('Tooltip закрыт через событие');
});
Этот способ более гибкий и лучше подходит для сложных сценариев.
При использовании событий обработчик получает объект события, который содержит полезные данные:
$('.tooltip').on('close.tooltipster', function(event) {
console.log(event);
});
В объекте event доступны:
event.type — тип события (close)event.namespace — пространство имён
(tooltipster)event.target — DOM-элемент, связанный с tooltipclose
и closingВ Tooltipster существует два связанных события:
closing — срабатывает перед
закрытиемclose — срабатывает после
закрытияЭто различие критично:
$('.tooltip').on('closing.tooltipster', function() {
console.log('Начало закрытия');
});
$('.tooltip').on('close.tooltipster', function() {
console.log('Закрытие завершено');
});
closing можно использовать для предотвращения закрытия,
а close — только для реакции на уже произошедшее
действие.
closeПри закрытии tooltip через API событие close также
срабатывает:
var instance = $('.tooltip').tooltipster('instance');
instance.close();
Обработчик:
$('.tooltip').on('close.tooltipster', function() {
console.log('Tooltip закрыт программно');
});
Если на странице несколько tooltip’ов, событие можно использовать для централизованного контроля:
$('.tooltip').on('close.tooltipster', function(event) {
const element = $(event.target);
console.log('Закрыт tooltip у элемента:', element);
});
$('.tooltip').on('close.tooltipster', function() {
$(this).tooltipster('content', '');
});
$('.tooltip').on('close.tooltipster', function() {
console.log('Пользователь закрыл подсказку');
});
$('.tooltip').on('close.tooltipster', function() {
$('.active').removeClass('active');
});
$('.tooltip').on('close.tooltipster', function() {
loadFreshData();
});
Tooltipster поддерживает анимации при закрытии. Событие
close вызывается после завершения
анимации, что гарантирует:
Если требуется реакция до окончания анимации,
используется closing.
Для предотвращения утечек памяти важно удалять обработчики:
$('.tooltip').off('close.tooltipster');
Или для конкретного обработчика:
function onCloseHandler() {
console.log('Закрытие');
}
$('.tooltip').on('close.tooltipster', onCloseHandler);
// позже
$('.tooltip').off('close.tooltipster', onCloseHandler);
При динамически добавляемых элементах:
$(document).on('close.tooltipster', '.tooltip', function() {
console.log('Закрыт динамический tooltip');
});
Событие close часто используется в связке:
init — инициализацияready — готовностьopen — открытиеclose — завершение работыПример цепочки:
$('.tooltip')
.on('open.tooltipster', function() {
console.log('Открытие');
})
.on('close.tooltipster', function() {
console.log('Закрытие');
});
closing)Некоторые настройки напрямую влияют на момент вызова события:
animationDuration — задержка перед
closedelay — может отложить закрытиеtrigger — определяет условия закрытияПример:
$('.tooltip').tooltipster({
animation: 'fade',
animationDuration: 500
});
В этом случае close произойдёт через 500 мс после начала
закрытия.
Для анализа поведения удобно логировать все связанные события:
$('.tooltip')
.on('opening.tooltipster', () => console.log('opening'))
.on('open.tooltipster', () => console.log('open'))
.on('closing.tooltipster', () => console.log('closing'))
.on('close.tooltipster', () => console.log('close'));
1. Использование close вместо
closing для отмены
$('.tooltip').on('close.tooltipster', function(e) {
e.preventDefault(); // НЕ сработает
});
Правильный подход:
$('.tooltip').on('closing.tooltipster', function(e) {
e.preventDefault();
});
2. Потеря контекста this
$('.tooltip').on('close.tooltipster', function() {
console.log(this); // DOM-элемент, а не instance
});
Для доступа к instance:
$('.tooltip').on('close.tooltipster', function() {
const instance = $(this).tooltipster('instance');
});
3. Дублирование обработчиков
function init() {
$('.tooltip').on('close.tooltipster', handler);
}
При повторном вызове init обработчики накапливаются.
Требуется предварительная очистка:
$('.tooltip').off('close.tooltipster').on('close.tooltipster', handler);
В крупных приложениях событие close часто используется
как часть событийной модели:
class TooltipController {
constructor(selector) {
this.$elements = $(selector);
this.init();
}
init() {
this.$elements.on('close.tooltipster', this.onClose.bind(this));
}
onClose(event) {
const element = $(event.target);
console.log('Tooltip закрыт:', element);
}
}
$('.tooltip').on('close.tooltipster', async function() {
await saveUserAction();
console.log('Данные сохранены после закрытия');
});
Событие удобно использовать как триггер изменения состояния:
let tooltipOpen = false;
$('.tooltip')
.on('open.tooltipster', () => tooltipOpen = true)
.on('close.tooltipster', () => tooltipOpen = false);
Событие close играет важную роль в:
Корректное использование позволяет избежать:
Событие close — это точка завершения жизненного цикла
tooltip’а. Его основная задача — дать возможность безопасно реагировать
на факт закрытия без риска вмешательства в процесс отображения или
анимации.