Механизм кнопок в библиотеке Noty позволяет не только отображать уведомления, но и превращать их в полноценные интерактивные элементы интерфейса. Использование нескольких кнопок в одном уведомлении открывает возможности для реализации диалогов подтверждения, выбора действий и сложных пользовательских сценариев.
Кнопки в Noty задаются через параметр buttons, который
принимает массив объектов. Каждый объект представляет отдельную кнопку и
создаётся с помощью конструктора Noty.button.
Пример базовой структуры:
new Noty({
text: 'Удалить файл?',
buttons: [
Noty.button('Да', 'btn btn-success', function () {
console.log('Удалено');
}),
Noty.button('Нет', 'btn btn-danger', function () {
console.log('Отмена');
})
]
}).show();
Noty.buttonКонструктор принимает следующие аргументы:
Дополнительно может передаваться объект с опциями:
Noty.button('ОК', 'btn', handler, { id: 'btn-ok' });
Кнопки отображаются в том порядке, в котором они указаны в массиве
buttons. Это позволяет управлять визуальной и логической
иерархией:
buttons: [
Noty.button('Отмена', 'btn btn-secondary', cancelHandler),
Noty.button('Сохранить', 'btn btn-primary', saveHandler)
]
Часто первичное действие располагается справа, вторичное — слева.
Каждая кнопка имеет собственный обработчик. Внутри функции доступен
контекст уведомления через this.
Noty.button('Закрыть', 'btn btn-warning', function () {
this.close();
});
Важно учитывать:
this указывает на экземпляр уведомления Notyclose(), setText(),
setType() и другиеПо умолчанию уведомление не закрывается автоматически при нажатии на кнопку. Закрытие необходимо вызывать вручную:
Noty.button('ОК', 'btn btn-success', function () {
this.close();
});
Это позволяет:
Кнопки часто используются для запуска асинхронных операций (например, запросов к серверу):
Noty.button('Удалить', 'btn btn-danger', function () {
const noty = this;
fetch('/delete', { method: 'POST' })
.then(() => {
noty.setText('Удалено');
noty.setType('success');
setTimeout(() => noty.close(), 1000);
});
});
Особенности:
this в переменнуюNoty не предоставляет прямого API для изменения кнопок после создания, однако можно:
this.close();
new Noty({
text: 'Вы уверены?',
buttons: [
Noty.button('Да', 'btn btn-success', confirmHandler),
Noty.button('Нет', 'btn btn-danger', cancelHandler)
]
}).show();
Кнопки полностью зависят от CSS-классов. Обычно используются классы фреймворков (Bootstrap, Tailwind и др.).
Пример с Bootstrap:
Noty.button('Сохранить', 'btn btn-primary btn-sm', handler)
Возможности стилизации:
btn-sm, btn-lg)btn-success, btn-danger)При выполнении действий может потребоваться отключить кнопку после клика:
Noty.button('Отправить', 'btn btn-primary', function () {
const btn = this.barDom.querySelector('.btn-primary');
btn.disabled = true;
setTimeout(() => {
this.close();
}, 2000);
});
Для сложных сценариев удобно выносить обработчики:
function handleConfirm() {
console.log('Подтверждено');
this.close();
}
function handleCancel() {
console.log('Отменено');
this.close();
}
new Noty({
text: 'Продолжить?',
buttons: [
Noty.button('Да', 'btn btn-success', handleConfirm),
Noty.button('Нет', 'btn btn-secondary', handleCancel)
]
}).show();
Множественные кнопки часто используются с типами уведомлений:
new Noty({
type: 'warning',
text: 'Действие необратимо',
buttons: [
Noty.button('Удалить', 'btn btn-danger', deleteHandler),
Noty.button('Отмена', 'btn btn-secondary', cancelHandler)
]
}).show();
timeout: false)buttons: [
Noty.button('Да', 'btn btn-success', confirm),
Noty.button('Нет', 'btn btn-danger', cancel)
]
buttons: [
Noty.button('Сохранить', 'btn btn-primary', save),
Noty.button('Не сохранять', 'btn btn-warning', discard),
Noty.button('Отмена', 'btn btn-secondary', cancel)
]
Noty.button('Перейти', 'btn btn-info', function () {
window.location.href = '/dashboard';
});
Механизм множественных кнопок в Noty превращает уведомления в гибкий инструмент взаимодействия, позволяющий реализовывать сложные пользовательские сценарии без создания дополнительных модальных окон.