Библиотека 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(text, className, onClick, attributes)
text — строкаclassName — строка с CSS-классамиonClick — функцияattributes — объект с дополнительными HTML-атрибутами
(необязательно)Пример с атрибутами:
Noty.button('Открыть', 'btn btn-primary', function () {
window.open('/dashboard');
}, { id: 'openBtn', 'data-action': 'open-dashboard' });
Функция обработчика получает доступ к экземпляру уведомления через
this. Это позволяет управлять самим уведомлением, например
закрывать его.
new Noty({
text: 'Сохранить изменения?',
buttons: [
Noty.button('Сохранить', 'btn btn-success', function () {
console.log('Сохранено');
this.close();
}),
Noty.button('Отмена', 'btn btn-secondary', function () {
this.close();
})
]
}).show();
Ключевой момент: this внутри обработчика — это объект
кнопки, но он содержит ссылку на родительское уведомление
(this.barDom, this.parent и др.). Чаще всего
используется метод this.close().
Если уведомление содержит кнопки, логично отключить автоматическое
закрытие (timeout), чтобы пользователь успел принять
решение.
new Noty({
text: 'Подтвердите действие',
timeout: false,
buttons: [
Noty.button('ОК', 'btn btn-primary', function () {
this.close();
})
]
}).show();
Noty не навязывает конкретные стили, поэтому внешний вид кнопок полностью контролируется через CSS-классы. Часто используется интеграция с CSS-фреймворками, например Bootstrap:
Noty.button('Принять', 'btn btn-success btn-sm', handler);
Noty.button('Отклонить', 'btn btn-danger btn-sm', handler);
Также можно использовать собственные классы:
.my-button {
background: #4CAF50;
color: white;
border-radius: 4px;
padding: 5px 10px;
}
Noty.button('OK', 'my-button', function () {
this.close();
});
Уведомление может содержать любое количество кнопок. Часто используется сценарий подтверждения действия:
new Noty({
text: 'Вы уверены, что хотите выйти?',
timeout: false,
buttons: [
Noty.button('Да', 'btn btn-success', function () {
console.log('Выход');
this.close();
}),
Noty.button('Нет', 'btn btn-danger', function () {
this.close();
}),
Noty.button('Отмена', 'btn btn-secondary', function () {
this.close();
})
]
}).show();
Кнопки удобно использовать для запуска асинхронных операций, например AJAX-запросов:
new Noty({
text: 'Удалить файл?',
timeout: false,
buttons: [
Noty.button('Удалить', 'btn btn-danger', function () {
fetch('/delete', { method: 'POST' })
.then(() => {
console.log('Удалено');
this.close();
});
}),
Noty.button('Отмена', 'btn btn-secondary', function () {
this.close();
})
]
}).show();
Важно учитывать, что this внутри then уже
не ссылается на кнопку. Для сохранения контекста используется
переменная:
Noty.button('Удалить', 'btn btn-danger', function () {
const noty = this;
fetch('/delete')
.then(() => {
noty.close();
});
});
Иногда требуется временно отключить кнопку, чтобы предотвратить повторное нажатие:
Noty.button('Отправить', 'btn btn-primary', function () {
const button = this.dom;
button.disabled = true;
setTimeout(() => {
this.close();
}, 2000);
});
this.dom — это DOM-элемент кнопки.
Кнопки могут формироваться динамически:
const actions = ['Да', 'Нет', 'Возможно'];
const buttons = actions.map(action =>
Noty.button(action, 'btn btn-info', function () {
console.log(action);
this.close();
})
);
new Noty({
text: 'Выберите вариант',
buttons: buttons
}).show();
Текст кнопки может содержать HTML:
Noty.button('<i class="fa fa-check"></i> OK', 'btn btn-success', function () {
this.close();
});
Важно: при использовании HTML следует учитывать безопасность (например, XSS).
Кнопки автоматически размещаются в нижней части уведомления. При необходимости можно изменить стиль контейнера:
.noty_buttons {
display: flex;
justify-content: space-between;
}
Если уведомление закрывается не через кнопку (например, пользователь
нажал вне области), логика кнопок не выполняется. Для обработки таких
ситуаций используется параметр callbacks:
new Noty({
text: 'Сохранить изменения?',
timeout: false,
buttons: [
Noty.button('Да', 'btn btn-success', function () {
this.close();
})
],
callbacks: {
onClose: function () {
console.log('Уведомление закрыто');
}
}
}).show();
Подтверждение действий:
Быстрые действия:
Интерактивные уведомления:
Интеграция кнопок делает уведомления Noty полноценным элементом интерфейса, способным заменить модальные окна в простых сценариях и снизить нагрузку на основной UI.