Событие onClosed является одним из ключевых механизмов
управления жизненным циклом уведомлений в библиотеке
iziToast. Оно позволяет выполнять определённые действия
сразу после того, как уведомление было полностью скрыто и удалено из
DOM. В отличие от события onClosing, которое срабатывает в
момент начала анимации скрытия, onClosed гарантирует, что
уведомление уже недоступно визуально и в коде.
Событие onClosed передается в объект настроек при
создании уведомления:
iziToast.show({
title: 'Уведомление',
message: 'Пример использования onClosed',
timeout: 3000,
onClosed: function(instance, toast, closedBy){
console.log('Уведомление закрыто');
console.log('Закрыто по причине:', closedBy);
}
});
Параметры функции обратного вызова:
instance — объект iziToast, через который можно
управлять уведомлением или создавать новые уведомления.
toast — DOM-элемент уведомления, который был
удален.
closedBy — строка, указывающая причину закрытия:
'timeout' — закрыто автоматически по истечении
таймера;'button' — закрыто нажатием на кнопку закрытия;'click' — закрыто кликом по уведомлению (если включена
опция closeOnClick);'overlay' — закрыто кликом по затемнению (если
используется overlay);'api' — закрыто программно через
iziToast.destroy() или iziToast.hide().onClosed от
onClosingonClosing вызывается до начала анимации
скрытия, что удобно для изменения стилей или подготовки данных
перед закрытием.onClosed вызывается после полной анимации и
удаления уведомления, что обеспечивает безопасное выполнение
любых действий, связанных с DOM, без риска обращения к удаленному
элементу.Пример различия:
iziToast.show({
title: 'Пример',
message: 'onClosing и onClosed',
timeout: 2000,
onClosing: function(instance, toast, closedBy){
console.log('Начало закрытия:', closedBy);
},
onClosed: function(instance, toast, closedBy){
console.log('Уведомление полностью закрыто:', closedBy);
}
});
iziToast.show({
title: 'Событие onClosed',
message: 'Отслеживание закрытия',
timeout: 4000,
onClosed: function(instance, toast, closedBy){
console.log(`Уведомление закрыто через: ${closedBy}`);
}
});
Если уведомление содержит динамически созданные элементы (например,
видео или графики), их следует удалять в onClosed, чтобы
избежать утечек памяти.
iziToast.show({
title: 'Видео уведомление',
message: 'Закрытие приведет к удалению видео',
timeout: 5000,
onClosed: function(instance, toast, closedBy){
const video = toast.querySelector('video');
if(video){
video.pause();
video.src = '';
video.remove();
}
}
});
iziToast.show({
title: 'Первое уведомление',
message: 'Будет закрыто через 3 секунды',
timeout: 3000,
onClosed: function(instance, toast, closedBy){
iziToast.show({
title: 'Второе уведомление',
message: 'Появилось после закрытия первого',
timeout: 3000
});
}
});
Можно использовать onClosed для отправки статистики о
действиях пользователей:
iziToast.show({
title: 'Отслеживание',
message: 'Отправка данных на сервер',
timeout: 2000,
onClosed: function(instance, toast, closedBy){
fetch('/log-toast-close', {
method: 'POST',
body: JSON.stringify({ closedBy }),
headers: { 'Content-Type': 'application/json' }
});
}
});
onClosedНекоторые параметры уведомления могут менять поведение события:
timeout — если выставлено
0, уведомление не закрывается автоматически, и
onClosed будет вызвано только при ручном закрытии или
программном удалении.closeOnClick — определяет, будет ли
клик по уведомлению инициировать закрытие и вызов
onClosed.overlay — использование затемнения
позволяет отслеживать закрытие через клик по overlay.Событие onClosed вызывается для каждого
отдельного уведомления. При создании очереди уведомлений можно
использовать его для последовательного управления:
iziToast.show({
title: '1/2',
message: 'Первое уведомление',
timeout: 2000,
onClosed: function(){
iziToast.show({
title: '2/2',
message: 'Второе уведомление после закрытия первого',
timeout: 2000
});
}
});
onClosed для действий, которые требуют
гарантированного удаления элемента из DOM.onClosed, так
как уведомление уже удалено.onClosing.closedBy для точного контроля логики в
зависимости от способа закрытия.onClosed обеспечивает полный контроль над жизненным
циклом уведомлений, позволяя надежно управлять DOM, ресурсами и
последовательностью действий после скрытия уведомлений.