В интерфейсах с высокой плотностью событий уведомления быстро превращаются в шум, если отсутствует механизм их упорядочивания. Приоритезация позволяет управлять вниманием пользователя, выделяя критически важные сообщения и подавляя второстепенные. В контексте библиотеки Toastify это достигается через комбинацию визуальных, временных и логических параметров.
Ключевые задачи приоритезации:
Библиотека Toastify не содержит встроенной системы приоритетов как отдельной сущности, однако предоставляет инструменты, позволяющие реализовать её вручную:
duration — время отображения уведомленияgravity — позиция по вертикали (top / bottom)position — позиция по горизонтали (left / center /
right)backgroundColor — визуальная дифференциацияstopOnFocus — приостановка исчезновения при
наведенииclassName) — расширяемость через
CSSКомбинирование этих параметров позволяет выстроить иерархию уведомлений.
Практически удобно разделить уведомления на несколько уровней:
Используется для ошибок, сбоев, потери данных.
Характеристики:
Toastify({
text: "Ошибка соединения с сервером",
duration: -1,
gravity: "top",
position: "right",
backgroundColor: "#ff4d4f",
stopOnFocus: true
}).showToast();
Сюда относятся предупреждения и важные уведомления, требующие внимания, но не критичные.
Характеристики:
Toastify({
text: "Срок действия сессии скоро истечёт",
duration: 8000,
gravity: "top",
position: "center",
backgroundColor: "#faad14"
}).showToast();
Информационные сообщения, не требующие немедленного внимания.
Характеристики:
Toastify({
text: "Данные успешно сохранены",
duration: 3000,
gravity: "bottom",
position: "right",
backgroundColor: "#52c41a"
}).showToast();
При большом количестве событий важно контролировать порядок появления уведомлений.
const queue = [];
function showNextToast() {
if (queue.length === 0) return;
const toast = queue.shift();
toast.showToast();
setTimeout(showNextToast, toast.options.duration || 3000);
}
Добавление уведомлений:
queue.push(
Toastify({ text: "Первое сообщение", duration: 3000 })
);
queue.push(
Toastify({ text: "Второе сообщение", duration: 3000 })
);
showNextToast();
Более сложный вариант — сортировка уведомлений по приоритету перед показом.
const queue = [];
function addToQueue(toast, priority) {
queue.push({ toast, priority });
queue.sort((a, b) => b.priority - a.priority);
}
function showNextToast() {
if (queue.length === 0) return;
const { toast } = queue.shift();
toast.showToast();
setTimeout(showNextToast, toast.options.duration || 3000);
}
Использование:
addToQueue(
Toastify({ text: "Информация", duration: 3000 }),
1
);
addToQueue(
Toastify({ text: "Критическая ошибка", duration: -1 }),
3
);
showNextToast();
Дополнительная дифференциация достигается с помощью пользовательских классов:
Toastify({
text: "Предупреждение",
className: "toast-warning"
}).showToast();
.toast-warning {
background: linear-gradient(45deg, #faad14, #d48806);
font-weight: bold;
}
.toast-critical {
background: linear-gradient(45deg, #ff4d4f, #a8071a);
color: #fff;
}
Одновременный показ большого количества toast-элементов снижает читаемость. Ограничение реализуется вручную:
let activeToasts = 0;
const MAX_TOASTS = 3;
function safeToast(options) {
if (activeToasts >= MAX_TOASTS) return;
activeToasts++;
Toastify({
...options,
callback: () => {
activeToasts--;
}
}).showToast();
}
Поведение уведомлений также влияет на восприятие приоритета:
Пример интерактивного уведомления:
Toastify({
text: "Обновление доступно",
duration: 10000,
close: true,
onClick: () => {
window.location.reload();
}
}).showToast();
Эффективная система приоритезации строится на сочетании:
Такой подход позволяет создать гибкую и масштабируемую систему уведомлений даже при отсутствии встроенной поддержки приоритетов в библиотеке Toastify.