Библиотека Noty позволяет создавать уведомления в веб-приложениях, которые могут не только информировать пользователя, но и управлять его взаимодействием с интерфейсом. Для реализации блокировки взаимодействия с интерфейсом используются модальные уведомления, предотвращающие действия пользователя до закрытия уведомления.
В Noty включение модального режима осуществляется через параметр
modal.
new Noty({
text: 'Обработка данных...',
type: 'info',
modal: true,
timeout: false
}).show();
Ключевые моменты:
modal: true — блокирует все клики по остальной части
страницы.timeout: false — уведомление не закрывается
автоматически, пока не будет закрыто программно или вручную через
кнопку.Блокировку интерфейса часто нужно сопровождать действиями
пользователя, например подтверждением или отменой. В Noty это
реализуется через параметр buttons.
new Noty({
text: 'Вы уверены, что хотите удалить запись?',
type: 'warning',
modal: true,
timeout: false,
buttons: [
Noty.button('Да', 'btn btn-success', function() {
console.log('Подтверждено');
this.close();
}),
Noty.button('Отмена', 'btn btn-danger', function() {
console.log('Отменено');
this.close();
})
]
}).show();
Важные моменты:
Noty.button(text, className, callback).this.close() закрывает уведомление и снимает блокировку
интерфейса.В некоторых сценариях блокировка интерфейса должна сниматься
автоматически по завершении задачи. Для этого используется событие
onClose или таймер через setTimeout.
const n = new Noty({
text: 'Идет загрузка данных...',
type: 'info',
modal: true,
timeout: false
}).show();
// Снятие блокировки через 5 секунд
setTimeout(() => {
n.close();
}, 5000);
Особенности реализации:
onClose позволяет выполнить дополнительные
действия после снятия блокировки: очистку данных, запуск других
функций.Noty в модальном режиме автоматически блокирует клики по фоновым элементам, но можно дополнительно управлять стилями элементов для визуального эффекта:
.noty_modal {
background-color: rgba(0, 0, 0, 0.5); /* затемнение фона */
pointer-events: auto; /* блокирует клики */
}
Применение:
pointer-events: auto гарантирует, что клики на
фоне будут игнорироваться.При интеграции с AJAX-запросами или промисами модальное уведомление может оставаться на экране до завершения операции:
const n = new Noty({
text: 'Сохраняем изменения...',
type: 'info',
modal: true,
timeout: false
}).show();
fetch('/save', { method: 'POST', body: JSON.stringify(data) })
.then(response => response.json())
.then(() => {
n.setText('Изменения сохранены!');
setTimeout(() => n.close(), 2000);
})
.catch(() => {
n.setText('Ошибка при сохранении!');
n.setType('error');
setTimeout(() => n.close(), 3000);
});
Особенности:
setText() позволяет динамически изменять текст
уведомления.setType() изменяет визуальное оформление для
информирования об успехе или ошибке.Для сложных сценариев можно создавать последовательности уведомлений, чтобы пользователь не мог взаимодействовать с интерфейсом до завершения всех шагов:
const step1 = new Noty({ text: 'Шаг 1...', type: 'info', modal: true, timeout: false }).show();
step1.on('afterClose', () => {
const step2 = new Noty({ text: 'Шаг 2...', type: 'info', modal: true, timeout: false }).show();
});
Преимущества: