Одной из ключевых возможностей, предоставляемых библиотекой SweetAlert, является возможность отображать индикатор загрузки, который информирует пользователя о том, что процесс обработки запроса или выполнения операции все еще продолжается. Это полезно для обеспечения взаимодействия с пользователем и предотвращения неопределенности в моменты, когда необходимо выполнить длительные операции, такие как загрузка данных с сервера или сложные вычисления на клиентской стороне.
SweetAlert предоставляет несколько встроенных методов для отображения
модальных окон с различными стилями уведомлений, включая “загрузка”.
Один из наиболее простых способов включения индикатора загрузки —
использование функции swal() с параметром, указывающим на
состояние ожидания.
Пример использования:
swal({
title: "Загрузка...",
text: "Пожалуйста, подождите, идет обработка данных.",
icon: "info",
buttons: false,
closeOnClickOutside: false,
closeOnEsc: false
});
В этом примере создается модальное окно с текстом и иконкой,
символизирующей загрузку. Параметры buttons: false,
closeOnClickOutside: false и closeOnEsc: false
препятствуют пользователю закрыть окно, пока операция не завершится. Это
важно для того, чтобы пользователь не смог случайно прервать
процесс.
Часто возникает необходимость использовать индикатор загрузки в
сочетании с асинхронными запросами, например, при взаимодействии с API
через fetch или XMLHttpRequest. В таких
случаях важно показать модальное окно до завершения выполнения операции
и скрыть его после получения ответа.
Пример с использованием fetch:
swal({
title: "Загрузка...",
text: "Подключение к серверу...",
icon: "info",
buttons: false,
closeOnClickOutside: false,
closeOnEsc: false
});
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
swal({
title: "Успех",
text: "Данные успешно загружены.",
icon: "success"
});
})
.catch(error => {
swal({
title: "Ошибка",
text: "Не удалось загрузить данные.",
icon: "error"
});
});
В этом примере окно загрузки отображается до тех пор, пока не завершится запрос к серверу. В случае успешного ответа показывается окно с сообщением об успехе, в случае ошибки — окно с сообщением об ошибке.
В SweetAlert предусмотрена возможность использования более динамичных индикаторов загрузки, таких как анимированные изображения или прогресс-бары. Это позволяет создать более привлекательный пользовательский интерфейс.
Для отображения анимации загрузки можно использовать кастомные изображения или иконки. Например, можно загрузить анимированную GIF-иконку и установить ее в качестве индикатора:
swal({
title: "Загрузка...",
text: "Подождите, идет обработка данных.",
imageUrl: 'path/to/loading.gif',
imageWidth: 50,
imageHeight: 50,
buttons: false,
closeOnClickOutside: false,
closeOnEsc: false
});
В данном примере используется анимированное изображение для
наглядного отображения процесса загрузки. Размеры изображения можно
настроить с помощью параметров imageWidth и
imageHeight.
Если необходимо отобразить процесс загрузки с более подробной информацией о его прогрессе, можно использовать кастомные элементы интерфейса, такие как прогресс-бары. Однако сама библиотека SweetAlert не поддерживает прогресс-бары “из коробки”. Но используя JavaScript, можно легко добавить прогресс-бар внутри модального окна.
Пример с прогресс-баром:
swal({
title: "Загрузка...",
content: {
element: "progress",
attributes: {
value: 0,
max: 100
}
},
buttons: false,
closeOnClickOutside: false,
closeOnEsc: false
});
let progressBar = document.querySelector("progress");
let progress = 0;
let interval = setInterval(function () {
progress += 10;
progressBar.value = progress;
if (progress === 100) {
clearInterval(interval);
swal({
title: "Успех",
text: "Загрузка завершена!",
icon: "success"
});
}
}, 500);
В данном примере создается модальное окно с прогресс-баром, который обновляется каждые 500 миллисекунд. Когда прогресс достигает 100%, появляется новое окно с сообщением об успешной загрузке.
swal.fire()Библиотека SweetAlert2, являющаяся более современной версией,
позволяет создавать модальные окна с загрузочными индикаторами с помощью
метода swal.fire(). Он предоставляет аналогичные
возможности, но с улучшенным интерфейсом и большей гибкостью.
Пример с использованием swal.fire():
swal.fire({
title: 'Загрузка...',
text: 'Подождите, идет обработка данных...',
showConfirmButton: false,
allowOutsideClick: false,
didOpen: () => {
swal.showLoading();
}
});
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
swal.fire({
title: 'Успех',
text: 'Данные успешно загружены.',
icon: 'success'
});
})
.catch(error => {
swal.fire({
title: 'Ошибка',
text: 'Не удалось загрузить данные.',
icon: 'error'
});
});
Метод showLoading() запускает стандартный индикатор
загрузки, который отображается до завершения асинхронной операции.
Преимущества использования индикаторов загрузки с SweetAlert заключаются в следующем:
Однако стоит помнить, что SweetAlert может не быть идеальным решением для всех типов приложений, особенно когда требуется сложное взаимодействие с множеством динамических элементов интерфейса. В таких случаях может потребоваться использование более мощных инструментов для создания индикаторов загрузки, таких как специализированные библиотеки или нативные решения на основе CSS и JavaScript.
Индикация загрузки в SweetAlert позволяет создавать современные и удобные интерфейсы с уведомлением пользователя о текущем состоянии процесса. Возможности, предоставляемые библиотекой, достаточно гибкие и подходят для большинства типов приложений.