Библиотека Toastify предоставляет гибкие механизмы для управления уведомлениями, включая их массовое удаление. Очистка всех активных уведомлений особенно важна в интерфейсах с высокой частотой событий, где накопление всплывающих сообщений может ухудшать пользовательский опыт.
Каждое уведомление, созданное через Toastify, добавляется в DOM как отдельный элемент. Для очистки всех уведомлений необходимо удалить соответствующие элементы из документа. Поскольку библиотека не предоставляет встроенного метода для глобальной очистки, используется работа с DOM напрямую.
Toastify добавляет уведомления в контейнер с классом:
.toastify
Или, если задан кастомный контейнер — в указанный пользователем элемент.
Удаление всех уведомлений через выборку элементов:
document.querySelectorAll('.toastify').forEach(toast => toast.remove());
Разбор:
querySelectorAll выбирает все элементы уведомленийforEach перебирает ихremove() удаляет каждый элемент из DOMЭтот способ универсален и работает независимо от того, как именно создавались уведомления.
Если используется кастомный контейнер, логичнее очищать его содержимое:
const container = document.getElementById('toast-container');
container.innerHTML = '';
Преимущества:
Ограничения:
При создании уведомлений можно сохранять ссылки на их экземпляры:
const toasts = [];
const toast = Toastify({
text: "Сообщение"
});
toasts.push(toast);
toast.showToast();
Очистка:
toasts.forEach(t => t.hideToast());
toasts.length = 0;
Особенности:
hideToast()Если требуется плавное удаление всех уведомлений:
document.querySelectorAll('.toastify').forEach(toast => {
toast.classList.add('on'); // триггер скрытия
setTimeout(() => toast.remove(), 400);
});
Пояснение:
setTimeout синхронизирован с длительностью
анимацииВ одностраничных приложениях важно очищать уведомления при переходах:
function clearToasts() {
document.querySelectorAll('.toastify').forEach(t => t.remove());
}
Использование:
window.addEventListener('hashchange', clearToasts);
или в фреймворках:
useEffect(() => {
return () => clearToasts();
}, []);
Иногда требуется удалить только часть уведомлений:
document.querySelectorAll('.toastify').forEach(toast => {
if (toast.textContent.includes('Ошибка')) {
toast.remove();
}
});
Применение:
При создании уведомлений можно назначать классы:
Toastify({
text: "Уведомление",
className: "custom-toast"
}).showToast();
Очистка только таких уведомлений:
document.querySelectorAll('.custom-toast').forEach(t => t.remove());
Toastify поддерживает разные позиции (top, bottom, left, right). Для очистки конкретной области:
document.querySelectorAll('.toastify.toastify-top').forEach(t => t.remove());
1. Утечки памяти
2. Нарушение анимации
remove()) обрывает анимациюhideToast() при необходимости
плавности3. Несовместимость с кастомными контейнерами
class ToastManager {
constructor() {
this.toasts = [];
}
show(options) {
const toast = Toastify(options);
this.toasts.push(toast);
toast.showToast();
}
clearAll() {
this.toasts.forEach(t => t.hideToast());
this.toasts = [];
}
}
Использование:
const manager = new ToastManager();
manager.show({ text: "Привет" });
manager.show({ text: "Ошибка" });
// Очистка всех
manager.clearAll();
Такой подход обеспечивает полный контроль над уведомлениями и упрощает их массовое управление.