Библиотека Toastify предназначена для создания простых и гибких уведомлений в браузере. Она позволяет не только отображать стандартные сообщения, но и интегрировать функционал с таймерами обратного отсчета, что особенно полезно для информирования пользователя о времени до завершения какого-либо события.
Для начала необходимо подключить библиотеку. Используется либо CDN, либо установка через npm/yarn:
<!-- CDN подключение -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/toastify-js"></script>
Или через npm:
npm install toastify-js
Подключение через модульный импорт:
import Toastify from "toastify-js";
import "toastify-js/src/toastify.css";
После подключения можно создавать уведомления.
Уведомления с таймером обратного отсчета требуют контроля
длительности отображения. Toastify использует параметр
duration, который задает время показа в миллисекундах. Для
реализации обратного отсчета понадобится динамическое обновление текста
уведомления.
Пример базовой структуры:
let countdown = 10; // секунды обратного отсчета
const toast = Toastify({
text: `До завершения: ${countdown} секунд`,
duration: countdown * 1000, // длительность отображения
close: true,
gravity: "top",
position: "right",
stopOnFocus: true, // пауза таймера при наведении
}).showToast();
Для полноценного обратного отсчета необходимо обновлять текст уведомления каждую секунду:
let countdown = 10;
const interval = setInterval(() => {
if (countdown <= 0) {
clearInterval(interval);
} else {
Toastify({
text: `До завершения: ${countdown} секунд`,
duration: 1000,
gravity: "top",
position: "right",
close: false,
stopOnFocus: true,
}).showToast();
countdown--;
}
}, 1000);
В этом примере создаются новые уведомления каждую секунду. Такой подход подходит для простых обратных отсчетов, но может быть неудобен при большом количестве уведомлений, поскольку создаются новые тосты, а старые исчезают.
Более элегантное решение — использовать один контейнер и обновлять текст существующего уведомления:
let countdown = 10;
const toast = Toastify({
text: `До завершения: ${countdown} секунд`,
duration: -1, // отключаем автоматическое исчезновение
gravity: "top",
position: "right",
close: true,
}).showToast();
const interval = setInterval(() => {
countdown--;
if (countdown <= 0) {
toast.hideToast(); // скрываем уведомление
clearInterval(interval);
} else {
toast.toastElement.textContent = `До завершения: ${countdown} секунд`;
}
}, 1000);
Здесь используется свойство toastElement для прямого
доступа к DOM-элементу уведомления, что позволяет менять текст без
создания новых тостов.
Toastify поддерживает гибкую кастомизацию:
backgroundColor — цвет фона уведомления.className — добавление CSS-классов.stopOnFocus — пауза таймера при наведении.close — отображение кнопки закрытия.gravity и position — положение на
экране.Пример уведомления с обратным отсчетом и кастомным стилем:
let countdown = 15;
const toast = Toastify({
text: `До окончания сессии: ${countdown} секунд`,
duration: -1,
close: true,
gravity: "top",
position: "right",
backgroundColor: "#ff6b6b",
className: "countdown-toast",
}).showToast();
const interval = setInterval(() => {
countdown--;
if (countdown <= 0) {
toast.hideToast();
clearInterval(interval);
} else {
toast.toastElement.textContent = `До окончания сессии: ${countdown} секунд`;
}
}, 1000);
Обратный отсчет может быть привязан к событиям, таким как:
Пример интеграции с кнопкой:
document.getElementById("startCountdown").addEventListener("click", () => {
let countdown = 20;
const toast = Toastify({
text: `Осталось: ${countdown} секунд`,
duration: -1,
close: true,
gravity: "bottom",
position: "left",
backgroundColor: "#1dd1a1",
}).showToast();
const interval = setInterval(() => {
countdown--;
if (countdown <= 0) {
toast.hideToast();
clearInterval(interval);
} else {
toast.toastElement.textContent = `Осталось: ${countdown} секунд`;
}
}, 1000);
});
Использование Toastify для уведомлений с обратным отсчетом требует понимания двух ключевых моментов:
duration
можно задавать динамически или полностью отключать для ручного
контроля.toastElement позволяет показывать
актуальное время без создания множества тостов.Такой подход обеспечивает удобные и наглядные уведомления, которые информируют пользователя о времени, оставшемся до события, с полной гибкостью по стилю и поведению уведомлений.