Библиотека Toastify реализует механизм отображения уведомлений таким образом, чтобы они не перекрывали друг друга хаотично и не создавали визуальный шум. В основе лежит простая, но эффективная очередь, управляющая порядком появления и исчезновения toast-элементов.
По умолчанию каждый новый toast добавляется в стек уведомлений, который визуально выстраивается в выбранной области экрана (например, сверху справа). Очередь работает по принципу FIFO (First In, First Out) — первый показанный элемент первым покидает экран.
Каждый вызов Toastify() с последующим
.showToast() инициирует создание нового DOM-элемента и его
вставку в контейнер уведомлений. Если в момент вызова уже есть активные
уведомления, новый элемент:
Пример:
Toastify({ text: "Первое уведомление" }).showToast();
Toastify({ text: "Второе уведомление" }).showToast();
Toastify({ text: "Третье уведомление" }).showToast();
В результате на экране появится три уведомления, расположенных одно под другим в порядке вызова.
Каждое уведомление имеет параметр duration, определяющий
время его отображения. По истечении этого времени:
Если уведомлений много, они не «ждут своей очереди» скрыто — все отображаются сразу, но исчезают по мере завершения своего жизненного цикла.
Пример с разным временем жизни:
Toastify({ text: "Короткое", duration: 2000 }).showToast();
Toastify({ text: "Длинное", duration: 5000 }).showToast();
В этом случае первое уведомление исчезнет раньше, даже если было добавлено раньше.
Очередь реализована через вертикальный стек с использованием CSS. Каждый новый toast:
Это достигается за счёт контейнера, внутри которого элементы располагаются в колонку.
Ключевые особенности:
По умолчанию Toastify не ограничивает количество одновременно отображаемых уведомлений. Это означает:
В таких случаях требуется ручное управление очередью или внедрение дополнительной логики.
При множественных вызовах подряд:
for (let i = 1; i <= 10; i++) {
Toastify({ text: `Сообщение ${i}` }).showToast();
}
Toastify:
Отсутствует встроенный механизм «паузы» между уведомлениями, поэтому визуально они появляются почти одновременно.
Параметры gravity и position определяют,
где именно будет формироваться очередь:
Toastify({
text: "Пример",
gravity: "top", // top или bottom
position: "right" // left, center, right
}).showToast();
Очередь формируется отдельно для каждой комбинации:
Это позволяет создавать независимые потоки уведомлений.
Если пользователь взаимодействует с уведомлением:
close: true появляется кнопка закрытияЭто влияет на стек:
Удаление toast происходит через:
Важно, что:
Это упрощает реализацию, но накладывает ограничения на сложные сценарии управления.
При необходимости ограничения количества уведомлений применяется внешний контроль:
const MAX_TOASTS = 3;
const activeToasts = [];
function showToast(message) {
if (activeToasts.length >= MAX_TOASTS) {
return;
}
const toast = Toastify({
text: message,
duration: 3000,
callback: () => {
activeToasts.shift();
}
});
activeToasts.push(toast);
toast.showToast();
}
Такой подход позволяет:
Каждое уведомление:
При удалении:
В стандартной реализации:
Для реализации приоритетов требуется:
Такой подход делает Toastify лёгкой и быстрой библиотекой, но переносит ответственность за сложное управление очередью на разработчика.