iziToast — это лёгкая и гибкая библиотека для создания уведомлений в JavaScript, которая позволяет информировать пользователя о процессе загрузки файлов без необходимости внедрять сложные кастомные решения. Одной из ключевых возможностей является создание прогресс-уведомлений, которые отображают состояние загрузки.
Для начала необходимо подключить библиотеку:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/izitoast/dist/css/iziToast.min.css">
<script src="https://cdn.jsdelivr.net/npm/izitoast/dist/js/iziToast.min.js"></script>
После подключения можно создавать уведомления с помощью метода
iziToast.show().
iziToast.show({
title: 'Загрузка файла',
message: 'Файл загружается...',
position: 'topRight',
timeout: false, // Отключает автоматическое закрытие
close: false
});
Ключевые моменты:
timeout: false позволяет уведомлению оставаться на
экране до завершения загрузки.close: false скрывает кнопку закрытия, чтобы
пользователь не прерывал процесс загрузки вручную.position регулирует место отображения уведомления.Для отображения динамического прогресса используется опция
progressBar. Ее можно обновлять программно в зависимости от
фактического состояния загрузки.
let toast = iziToast.show({
title: 'Загрузка файла',
message: 'Начало загрузки...',
position: 'topRight',
timeout: false,
progressBar: true
});
function updateProgress(progress) {
// progress в диапазоне 0-100
toast.progress(progress);
if(progress === 100){
iziToast.success({
title: 'Готово',
message: 'Файл успешно загружен',
position: 'topRight'
});
toast.hide();
}
}
Особенности:
toast.progress(value) динамически обновляет
прогресс-бар.toast.hide()
для удаления уведомления.iziToast.success() позволяет показать финальное
уведомление об успешной загрузке.Для интеграции с реальной загрузкой можно использовать
XMLHttpRequest или fetch с
FormData.
function uploadFile(file) {
let xhr = new XMLHttpRequest();
let formData = new FormData();
formData.append('file', file);
let toast = iziToast.show({
title: 'Загрузка файла',
message: '0% завершено',
position: 'topRight',
timeout: false,
progressBar: true
});
xhr.upload.addEventListener('progress', function(e) {
if (e.lengthComputable) {
let percent = Math.round((e.loaded / e.total) * 100);
toast.progress(percent);
toast.setMessage(`${percent}% завершено`);
}
});
xhr.onl oad = function() {
if (xhr.status === 200) {
toast.hide();
iziToast.success({
title: 'Успех',
message: 'Файл загружен',
position: 'topRight'
});
} else {
toast.hide();
iziToast.error({
title: 'Ошибка',
message: 'Не удалось загрузить файл',
position: 'topRight'
});
}
};
xhr.open('POST', '/upload');
xhr.send(formData);
}
Особенности реализации:
xhr.upload.addEventListener('progress', ...) позволяет
отслеживать прогресс загрузки.toast.setMessage() обновляет текст уведомления в
реальном времени.iziToast позволяет гибко настраивать внешний вид и поведение уведомлений:
backgroundColor,
titleColor, messageColor.icon или iconText
для отображения статуса (например, значок загрузки или галочка после
завершения).animateInside и
transitionIn/Out позволяют задать плавное появление и
скрытие.iziToast.show({
title: 'Загрузка файла',
message: 'Идёт процесс...',
position: 'topRight',
timeout: false,
progressBar: true,
backgroundColor: '#333',
titleColor: '#fff',
messageColor: '#ddd',
icon: 'fa fa-upload',
animateInside: true
});
Преимущества кастомизации:
Для параллельной загрузки нескольких файлов рекомендуется создавать отдельное уведомление для каждого файла. Это позволяет отслеживать прогресс каждого файла отдельно и избежать путаницы.
Array.from(files).forEach(file => {
uploadFile(file);
});
Каждое уведомление получает свой прогресс-бар и финальное уведомление об успешной загрузке или ошибке.
timeout: 2000 после завершения загрузки.Отменить через buttons позволяет прерывать
загрузку.iziToast.settings() позволяет задавать дефолтные параметры
для всех уведомлений в приложении, например, позицию или анимацию.iziToast.settings({
timeout: 5000,
position: 'topRight'
});
Это удобно для поддержания единого стиля уведомлений без необходимости повторять настройки для каждого файла.
Хотите, я могу подготовить расширенный пример с полностью функциональным интерфейсом загрузки файлов с прогресс-баром и кнопкой отмены для каждого файла?