Blog. Just Blog

Прогрессбар с анимированным градиентом на CSS

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Прогрессбар с анимированным градиентом на CSS
Прогрессбар с анимированным градиентом на CSS

Анимированный прогрессбар очень часто используется в приложениях для мобильных устройств. Но его также можно использовать и на сайтах, когда выполняется какой-то длительный процесс и надо создать у пользователя иллюзию, что приложение не зависло и что-то происходит прямо сейчас. Для анимации обычно применяется бегущий градиентный фон. Сегодня сделаем такой градиентный прогрессбар на чистом CSS, а "оживим" его с помощью JavaScript.

Начнем с небольшой теории. Для создания градиентного фона у выбранного элемента в CSS используется свойство linear-gradient. Для максимального эффекта наш градиент должен состоять из нескольких интервалов разного цвета. Вручную подбирать цвета довольно геморройно, поэтому рекомендую воспользоваться онлайновым сервисом CSS Gradient. С его помощью можно буквально в несколько кликов создать готовый стиль градиента.
  1. <style type="text/css">
  2. .progress {
  3.     backgroundrgb(76,233,92);
  4.     backgroundlinear-gradient(
  5.         90deg,
  6.         rgba(76,233,92,10%,
  7.         rgba(177,40,66,120%,
  8.         rgba(157,153,6,140%,
  9.         rgba(189,44,4,160%,
  10.         rgba(222,172,2,180%,
  11.         rgba(0,212,255,1100%
  12.     );
  13.     animationprogress 5s infinite linear;
  14.     background-size200%;
  15. }
  16. @keyframes progress {
  17.     0% {
  18.         background-position800%;
  19.     }
  20.     25% {
  21.         background-position6040%;
  22.     }
  23.     50% {
  24.         background-position20100%;
  25.     }
  26.     75% {
  27.         background-position6040%;
  28.     }
  29.     100% {
  30.         background-position800%;
  31.     }
  32. }
  33. </style>
Но если просто назначить градиент элементу, то он останется статичным. Анимация достигается при помощи следующего нехитрого трюка. Фон растягивается до размера в несколько раз больше размеров самого элемента, а затем через стандартную CSS-анимацию фон перемещается по элементу. Если по какой-то причине браузер не поддерживает анимацию или градиент, то полоска прогресса будет просто одного фиксированного цвета.

HTML-верстка в данном случае будет очень простой. Элементу, который будет визуализировать собой прогрессбар, назначается класс с описанным выше анимированным градиентом и устанавливаются нужные размеры, соответствующие прогрессу выполняемой задачи.
  1. <div class="progress" id="progress" style="width:30%; height:20px;"></div>
  2. <span id="prc" style="font-size:30px;">0%</span>
Если степень прогресса действительно известна, то сам размер элемента можно (и нужно) менять, например, при помощи простенького скрипта на JavaScript.
  1. <script type="text/javascript">
  2. var percent=0;
  3. setInterval(function() {
  4.     percent++;
  5.     if (percent>100) {
  6.         percent=0;
  7.     }
  8.     document.getElementById('progress').style.width=percent+'%';
  9.     document.getElementById('prc').innerHTML=percent+'%';
  10. },1000);
  11. </script>
В приведенном примере просто каждую секунду размер полоски увеличивается на 1%, а при достижении 100% прогресс обнуляется и все начинается сначала.

Готовый пример прогрессбара с градиентным фоном можно посмотреть на демонстрационной странице.

Поделиться ссылкой ВКонтакте
Просмотров: 77 | Комментариев: 0

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0044 сек.) / Память: 4.5 Mb
Наверх