Toastify — легкая и удобная библиотека для отображения уведомлений в веб-приложениях на JavaScript. Одним из ключевых аспектов пользовательского опыта является частота показа уведомлений, которая напрямую влияет на информативность и ненавязчивость интерфейса. Управление частотой уведомлений позволяет избежать перегрузки пользователя и повысить эффективность взаимодействия.
По умолчанию Toastify позволяет создавать любое количество тостов, что может привести к наложению уведомлений друг на друга. Для контроля этого поведения используется комбинация состояния отображаемых тостов и методов, предоставляемых библиотекой.
Пример ограничения числа одновременно отображаемых уведомлений:
let activeToasts = 0;
const maxToasts = 3;
function showToast(message) {
if (activeToasts >= maxToasts) return;
activeToasts++;
Toastify({
text: message,
duration: 3000,
gravity: "top",
position: "right",
onClose: () => { activeToasts--; }
}).showToast();
}
Разбор кода:
activeToasts — текущий счетчик активных
уведомлений.maxToasts — максимальное количество уведомлений на
экране одновременно.onClose — обратный вызов, уменьшающий счетчик после
закрытия уведомления.Такой подход предотвращает одновременное появление большого числа тостов, сохраняя интерфейс чистым и читаемым.
В некоторых случаях необходимо регулировать интервал появления уведомлений, особенно при их генерации в циклах или при массовых событиях. Для этого используют таймеры или системы очередей.
Пример последовательного показа с интервалом:
const messages = ["Событие 1", "Событие 2", "Событие 3"];
let index = 0;
function showNextToast() {
if (index >= messages.length) return;
Toastify({
text: messages[index],
duration: 2500,
gravity: "bottom",
position: "center"
}).showToast();
index++;
setTimeout(showNextToast, 3000); // интервал между уведомлениями 3 секунды
}
showNextToast();
Особенности подхода:
setTimeout задает промежуток времени между вызовами
уведомлений.3000 мс) можно подбирать исходя из
длительности duration, чтобы уведомления не наслаивались
друг на друга.Для сложных приложений с большим количеством событий рекомендуется создавать очередь уведомлений, где каждое новое сообщение добавляется в очередь и отображается после закрытия предыдущего. Это обеспечивает строгий контроль частоты и порядок показа.
Пример реализации очереди:
const toastQueue = [];
function enqueueToast(message, duration = 3000) {
toastQueue.push({ message, duration });
if (toastQueue.length === 1) {
displayNextToast();
}
}
function displayNextToast() {
if (toastQueue.length === 0) return;
const { message, duration } = toastQueue[0];
Toastify({
text: message,
duration: duration,
gravity: "top",
position: "right",
onClose: () => {
toastQueue.shift();
displayNextToast();
}
}).showToast();
}
enqueueToast("Первое уведомление");
enqueueToast("Второе уведомление");
enqueueToast("Третье уведомление");
Преимущества очереди:
В случаях, когда уведомления могут повторяться через определенные интервалы (например, обновление статуса), важно использовать механизмы дедупликации или временные фильтры, чтобы избежать спама.
Пример фильтрации повторных уведомлений:
const shownMessages = new Set();
function showUniqueToast(message) {
if (shownMessages.has(message)) return;
shownMessages.add(message);
Toastify({
text: message,
duration: 2500,
gravity: "bottom",
position: "center"
}).showToast();
setTimeout(() => shownMessages.delete(message), 5000); // повтор разрешен через 5 секунд
}
Принцип работы:
shownMessages хранит уникальные сообщения, уже
показанные пользователю.duration и максимального числа активных уведомлений.Эти методы позволяют создавать плавный, управляемый и удобный пользовательский опыт при работе с Toastify в любых веб-приложениях.