Библиотека Noty предоставляет гибкую систему уведомлений для веб-приложений. Одним из важных аспектов является приоритет уведомлений, позволяющий управлять очередностью их отображения и предотвращать визуальный хаос при множественных событиях на странице.
В Noty уведомления по умолчанию добавляются в очередь и отображаются в порядке их создания. Управление приоритетом достигается несколькими способами: через опции конфигурации, методы enqueue/dequeue, а также кастомную обработку очереди уведомлений.
Основной механизм приоритета в Noty основан на позиции уведомления и количестве одновременно отображаемых уведомлений.
Пример конфигурации:
new Noty({
text: 'Важное уведомление',
type: 'alert',
layout: 'topRight',
timeout: 5000,
progressBar: true,
maxVisible: 3
}).show();
В данном случае, если одновременно создаются более трёх уведомлений, они помещаются в очередь и отображаются по мере освобождения места.
Для реализации кастомного приоритета можно расширить стандартную очередь. Например, добавить уровень приоритета к каждому уведомлению и отображать уведомления с более высоким приоритетом раньше.
Пример:
const notificationsQueue = [];
function addNotification(options, priority = 1) {
notificationsQueue.push({options, priority});
notificationsQueue.sort((a, b) => b.priority - a.priority);
renderNotifications();
}
function renderNotifications() {
const visibleNotifications = notificationsQueue.splice(0, 3); // maxVisible = 3
visibleNotifications.forEach(item => {
new Noty(item.options).show();
});
}
В этом примере уведомления сортируются по приоритету перед показом, что обеспечивает вывод более важных сообщений раньше менее значимых.
Noty имеет встроенные типы уведомлений: alert, success, warning, error, info. Можно использовать их как индикатор приоритета:
error – высокий приоритетwarning – средний приоритетinfo и success – низкий приоритетПример использования:
function showNotification(type, message) {
let priority = 1;
switch(type) {
case 'error': priority = 3; break;
case 'warning': priority = 2; break;
case 'info':
case 'success': priority = 1; break;
}
addNotification({text: message, type, layout: 'topRight', timeout: 4000}, priority);
}
Такой подход упрощает управление очередью без необходимости вручную задавать числовой приоритет для каждого уведомления.
Для соблюдения приоритета важно контролировать количество
одновременных уведомлений. Noty предоставляет метод
maxVisible, но в сложных сценариях можно реализовать
динамическое управление:
let activeNotifications = 0;
const maxVisible = 3;
function showNextNotification() {
if(activeNotifications >= maxVisible || notificationsQueue.length === 0) return;
const {options} = notificationsQueue.shift();
activeNotifications++;
const n = new Noty(options).show();
n.on('onClose', () => {
activeNotifications--;
showNextNotification();
});
}
Это позволяет гарантировать, что уведомления с более высоким приоритетом будут показаны раньше, даже если очередь насыщена большим количеством низкоприоритетных сообщений.
Часто приоритет уведомлений зависит от событий в приложении, например:
Использование функции addNotification с сортировкой по
приоритету позволяет централизованно управлять уведомлениями и
обеспечивать согласованное поведение при интенсивных событиях.
Такая организация уведомлений обеспечивает интуитивную иерархию важности, улучшает UX и предотвращает потерю критической информации среди менее значимых сообщений.