Статьи

Как создать иконку загрузки Ajax CSS3 без изображений

Существует неизбежная задержка всякий раз, когда ваше веб-приложение взаимодействует с сервером. Это может быть для запроса Ajax, загрузки файла или использования более новых API-интерфейсов HTML5, таких как веб-сокеты или отправленные сервером события.

В идеале, вы должны дать пользователю некоторую обратную связь, чтобы указать, что его действие обрабатывается. Вы часто будете видеть маленькие анимированные GIF-изображения с вращающимися узорами. Есть несколько сайтов, которые будут создавать их для вас, такие как preloaders.net и ajaxload.info .

Изображения — лучший кросс-браузерный вариант, но у них есть ряд проблем:

  • GIF-файлы не поддерживают альфа-прозрачность. Вы должны быть осторожны при размещении изображения на цветном фоне.
  • Растровые изображения не будут хорошо масштабироваться. Если вы измените размеры, вам нужно создать новое изображение.
  • Если вы не будете осторожны, анимированная графика может иметь большой размер файла.
  • Изображения подвергаются дополнительному HTTP-запросу. Хотя изображение будет кэшировано, первоначальная загрузка может занять больше времени, чем фоновый процесс, который он представляет! Вы можете обойти эту проблему, предварительно загрузив изображение или используя встроенные URL-адреса данных, но это требует больше усилий.

К счастью, CSS3 позволяет создавать иконки загрузки без изображений. Их легко создавать, масштабировать, перекрашивать, использовать на любом фоне и не загружать изображения. Вы требуете:

  1. Один элемент HTML, например, <div id="ajaxloader"></div> .
  2. Несколько CSS-фонов, границ и эффектов затенения для создания графического значка.
  3. CSS3 преобразования и анимации для поворота или перемещения элемента.

Посмотреть демонстрационную страницу …

Совместимость браузера

CSS3 преобразования и анимации — это экспериментальные свойства, для которых требуются префиксы вендоров — и вы знаете, какие проблемы они вызывают . Пример кода реализует конечное свойство, а также префиксы для -webkit (Chrome и Safari), -moz (Firefox), -ms (IE) и -o (Opera), но нет гарантии, что они будут работать согласованно, если при все.

На момент написания этой статьи последние версии Chrome, Safari и Firefox предлагают анимацию CSS3. IE9 / 8/7/6 и Opera показывают статическое изображение, хотя IE10 и Opera 12 могут поддерживать свойства.

Чтобы еще больше усложнить ситуацию, Firefox позволяет вам анимировать псевдоэлементы отдельно. Поэтому вы можете добавить пару элементов, используя: before и: after и вращать или перемещать их в разных направлениях, чтобы создавать более сложные анимации. Хотя я изначально надеялся сделать это, он не работает в браузерах webkit. Chrome и Safari позволяют анимировать только реальные элементы. Кажется, это ошибка или недосмотр, но она не была исправлена ​​в текущих или бета-версиях.

Создание иконы

Наш HTML- div можно разместить в любом месте документа, хотя лучше всего добавить его как последний дочерний элемент body . Затем он появится над другими элементами и может быть расположен относительно страницы.

Значок CSS просто устанавливает широкую белую закругленную границу. Затем цвет правой границы становится прозрачным и применяется небольшая заливка:

 #ajaxloader { position: absolute; width: 30px; height: 30px; border: 8px solid #fff; border-right-color: transparent; border-radius: 50%; box-shadow: 0 0 25px 2px #eee; } 

Результат:

CSS значок Ajax 1

Можно легко настроить свойства для различных эффектов, например, добавив border-right: 0 none; производит:

CSS Ajax icon 2

Анимация иконы

Чтобы заставить значок вращаться и пульсировать, мы применяем преобразования вращения и изменения непрозрачности в анимации CSS3. Имя анимации, продолжительность, тип замедления и повтор применяются к элементу:

 #ajaxloader { animation: spin 1s linear infinite; } 

затем ключевые кадры анимации:

 @keyframes spin { from { transform: rotate(0deg); opacity: 0.2; } 50% { transform: rotate(180deg); opacity: 1.0; } to { transform: rotate(360deg); opacity: 0.2; } } 

Ни один из браузеров не поддерживает анимацию без префиксов поставщиков, поэтому вы увидите альтернативы -webkit, -moz, -ms и -o в исходном коде при просмотре демонстрационной страницы .

Теперь значок может отображаться с помощью небольшого JavaScript-кода при каждом запуске Ajax-запроса. Это отличный эффект, который можно легко настроить и работает на 55% современных браузеров .

К сожалению, 45% веб-пользователей не увидят анимацию. Это число упадет, когда выйдет IE10, и пользователи переключатся на последние версии других браузеров, но он остается большим процентом. Вы можете вернуться к изображению, но, если вы делаете это, вы также можете использовать изображение для всех браузеров.

Поэтому я предлагаю вам взглянуть на собственную статистику. Если ваши посетители преимущественно используют Chrome, Safari и Firefox, вы можете использовать эту технику сегодня. Если нет, придерживайтесь изображений на данный момент и подождите немного дольше для более последовательной поддержки браузера.