Библиотека Toastify реализует уведомления по принципу очереди: каждое новое сообщение добавляется в стек и отображается либо одновременно с другими, либо с учётом заданных ограничений (например, максимального количества уведомлений на экране).
Очередь формируется автоматически при вызове
Toastify({...}).showToast(). Однако управление этой
очередью — важная часть пользовательского интерфейса, особенно при
работе с большим количеством событий.
По умолчанию уведомления исчезают автоматически через заданный интервал времени:
Toastify({
text: "Данные сохранены",
duration: 3000
}).showToast();
Ключевые параметры:
duration — время жизни уведомления в миллисекундахclose: true — добавляет кнопку закрытияstopOnFocus: true — приостанавливает таймер при
наведенииПосле истечения времени уведомление удаляется из DOM и, соответственно, из визуальной очереди.
Каждый вызов Toastify() возвращает экземпляр
уведомления, который можно сохранить в переменной:
const toast = Toastify({
text: "Загрузка..."
});
toast.showToast();
Удаление выполняется методом:
toast.hideToast();
Особенности:
durationДля управления несколькими уведомлениями удобно хранить ссылки на них:
const notifications = [];
function addNotification(message) {
const toast = Toastify({
text: message,
duration: -1 // бесконечное отображение
});
notifications.push(toast);
toast.showToast();
}
Удаление всех уведомлений:
function clearAllNotifications() {
notifications.forEach(toast => toast.hideToast());
notifications.length = 0;
}
Такой подход позволяет реализовать полный контроль над очередью.
В стандартной реализации Toastify нет встроенного ограничения длины очереди, поэтому его необходимо реализовывать вручную.
Пример ограничения:
const maxToasts = 3;
const queue = [];
function showToast(message) {
if (queue.length >= maxToasts) {
const oldest = queue.shift();
oldest.hideToast();
}
const toast = Toastify({
text: message,
duration: 5000
});
queue.push(toast);
toast.showToast();
}
Принцип работы:
Иногда требуется не удалять уведомления, а откладывать их показ:
const queue = [];
let isShowing = false;
function processQueue() {
if (queue.length === 0) {
isShowing = false;
return;
}
isShowing = true;
const toast = queue.shift();
toast.showToast();
setTimeout(() => {
processQueue();
}, toast.options.duration || 3000);
}
function enqueueToast(message) {
const toast = Toastify({
text: message,
duration: 3000
});
queue.push(toast);
if (!isShowing) {
processQueue();
}
}
Результат:
Удаление можно привязать к пользовательским действиям:
const toast = Toastify({
text: "Ошибка! Нажмите для закрытия",
duration: -1,
onClick: function() {
toast.hideToast();
}
});
toast.showToast();
Также можно использовать внешние события:
document.getElementById("cancelBtn").addEventListener("click", () => {
toast.hideToast();
});
Если ссылки на уведомления не сохранены, можно удалить их напрямую через DOM:
document.querySelectorAll(".toastify").forEach(el => el.remove());
Недостатки подхода:
Для отслеживания удаления используется колбэк
callback:
Toastify({
text: "Готово",
duration: 3000,
callback: function() {
console.log("Уведомление удалено");
}
}).showToast();
Применение:
При переходе между страницами или изменении состояния интерфейса полезно очищать очередь:
function resetNotifications(queue) {
queue.forEach(toast => toast.hideToast());
queue.length = 0;
}
Типичные сценарии:
| Подход | Контроль | Анимация | Гибкость |
|---|---|---|---|
duration |
низкий | есть | низкая |
hideToast() |
высокий | есть | высокая |
| управление массивом | высокий | есть | очень высокая |
| прямое удаление из DOM | полный | нет | опасная |
durationКонтроль удаления уведомлений — ключ к предсказуемому поведению интерфейса и стабильной работе пользовательских сценариев.