Библиотека Toastify в JavaScript изначально проектировалась для быстрого отображения уведомлений, которые автоматически исчезают через заданный промежуток времени. Однако в ряде случаев возникает необходимость изменить уже отображаемое уведомление — изменить текст, стиль, продолжительность или добавить дополнительные события.
После создания уведомления объект Toastify возвращает экземпляр, через который можно управлять его поведением. Важно понимать, что Toastify не использует внутренние идентификаторы уведомлений для последующего поиска — управление осуществляется через прямые ссылки на созданные объекты.
let toast = Toastify({
text: "Первоначальный текст",
duration: 3000
}).showToast();
В этом примере переменная toast хранит ссылку на
уведомление. С помощью этой ссылки возможно управлять уведомлением до
его автоматического исчезновения.
Изменение текста выполняется через модификацию свойства
options.text и повторное обновление DOM элемента
уведомления:
toast.options.text = "Обновлённый текст";
toast.toastElement.querySelector(".toastify").textContent = toast.options.text;
Здесь ключевые моменты:
toast.options содержит исходные настройки
уведомления.toast.toastElement — DOM-элемент, на котором
отображается уведомление.Для управления временем отображения можно использовать методы остановки и повторного запуска таймера:
// Остановить текущее уведомление
clearTimeout(toast.dismissTimeout);
// Установить новую длительность
toast.options.duration = 5000;
// Перезапустить таймер
toast.dismissTimeout = setTimeout(() => toast.hideToast(), toast.options.duration);
Такой подход позволяет динамически изменять длительность существующих уведомлений без их повторного создания.
Внешний вид уведомления может быть изменён через манипуляции с классами и стилями DOM-элемента:
toast.toastElement.style.background = "#4CAF50";
toast.toastElement.style.color = "#ffffff";
Дополнительно можно использовать условные классы:
toast.toastElement.classList.add("custom-toast");
toast.toastElement.classList.remove("default-toast");
Это даёт возможность применять разные темы и динамически менять стили при определённых событиях.
Уведомления Toastify поддерживают события клика, закрытия и окончания таймера. Их можно добавлять и после создания:
toast.toastElement.addEventListener("click", () => {
toast.options.text = "Вы кликнули по уведомлению!";
toast.toastElement.querySelector(".toastify").textContent = toast.options.text;
});
Такой подход позволяет создавать интерактивные уведомления, которые реагируют на действия пользователя без необходимости повторного создания.
Если на странице одновременно отображается несколько уведомлений, рекомендуется хранить ссылки на все объекты Toastify в массиве:
let notifications = [];
notifications.push(Toastify({ text: "Уведомление 1" }).showToast());
notifications.push(Toastify({ text: "Уведомление 2" }).showToast());
// Изменение текста второго уведомления
notifications[1].options.text = "Обновлённое уведомление 2";
notifications[1].toastElement.querySelector(".toastify").textContent = notifications[1].options.text;
Это обеспечивает удобное управление всеми уведомлениями без потери ссылок на конкретные объекты.
При асинхронных операциях важно учитывать, что уведомления могут исчезнуть до момента изменения. В таких случаях рекомендуется:
duration: -1 для постоянного отображения
уведомления до ручного скрытия.hideToast() и таймеры.let toast = Toastify({
text: "Загрузка...",
duration: -1
}).showToast();
// После завершения асинхронного запроса
fetch("/api/data")
.then(response => response.json())
.then(data => {
toast.options.text = "Загрузка завершена!";
toast.toastElement.querySelector(".toastify").textContent = toast.options.text;
setTimeout(() => toast.hideToast(), 2000);
});
Такой подход позволяет уведомлению оставаться на экране в течение всей асинхронной операции и корректно обновляться после завершения.
options для изменения текста, длительности
или стиля.toastElement для немедленного
отражения изменений.Эти принципы позволяют использовать Toastify не только для простых уведомлений, но и для динамически изменяемых интерактивных сообщений на странице.