Создание и стилизация индикатора выполнения в HTML5
Оригинал: http://www.hongkiat.com/blog/html5-progress-bar/
Перевод: Влад Мержевич
В HTML5 добавлен элемент для индикатора выполнения, который позволяет показывать прогресс выполнения определённых задач вроде скачивания или загрузки, в основном всё, что занимает некоторое время.
В этой статье мы обсудим, как добавить этот элемент в документ, задать ему стиль через CSS и сделать анимацию прогресса.
Давайте начнём.
Основы использования
Индикатор добавляется тегом <progress>; значение прогресса определяется атрибутами value, min и max следующим образом.
<progress value="10" max="100"></progress>
Поскольку речь идёт о встроенном индикаторе, его вид варьируется в зависимости от платформы. Ниже показано, как встроенный индикатор выглядит в Windows и OS X.
Давайте теперь попробуем стилизовать этот элемент, чтобы он выглядел одинаково на всех платформах.
Стилизация индикатора выполнения
В таблице стилей мы можем использовать селектор progress для добавления стилевых правил к элементу <progress>. В данном примере мы меняем цвет фона, убираем границу и сделаем скругление, задав радиус в половину высоты.
progress {
background-color: #f3f3f3;
border: 0;
height: 18px;
border-radius: 9px;
}
Тем не менее, в браузерах имеются небольшие отличия. В Firefox стили применяются к самому индикатору, в то время как стиль бегунка не меняется.
В Chrome и Safari исходные стили убираются и заменяются на стили Webkit, так что стиль выше не применяется (по крайней мере, на данный момент).
Итак, нам нужно что-то ещё в таком случае.
В Chrome и Safari элемент <progress> расшифровывается следующим образом.
<progress>
┗ <div> ::-webkit-progress-bar
┗ <div>::-webkit-progress-value
Таким образом, чтобы изменить стиль индикатора выполнения и бегунка в этих браузерах, мы должны добавить такие псевдоклассы.
progress::-webkit-progress-bar {
/* стилевые правила */
}
progress::-webkit-progress-value {
/* стилевые правила */
}
У Firefox также есть специальный псевдокласс ::-moz-progress-bar. В отличие от Chrome и Safari, этот псевдокласс в Firefox относится к бегунку.
progress::-moz-progress-bar {
/* стилевые правила */
}
Окончательно собираем эти селекторы вместе для стилизации индикатора выполнения.
progress {
/* стилевые правила */
}
progress::-webkit-progress-bar {
/* стилевые правила */
}
progress::-webkit-progress-value {
/* стилевые правила */
}
progress::-moz-progress-bar {
/* стилевые правила */
}
Анимация прогресса
Далее мы увидим как анимировать индикатор. Как правило, бегунок растёт слева направо по мере прогресса задачи. Идея состоит в том, бегунок будет расти от 0 и остановится, как только достигнет максимального значения. Будем также отображать значение числа по мере продвижения бегунка. Ниже приводится структура HTML.
<progress id="progressbar" value="0" max="100"></progress>
В данном примере для анимации индикатора мы будем использовать jQuery, так что не забудьте вставить jQuery таким образом.
<script src="js/jquery.js"></script>
Затем мы добавим скрипт для увеличения прогресса. Вначале сохраним в переменных сам элемент, максимальное и текущее значение и период времени.
var progressbar = $('#progressbar'),
max = progressbar.attr('max'),
value = progressbar.val(),
time = (1000/max)*5;
Затем создаём переменную, которая хранит функцию анимации. В этом примере она называется loading.
var loading = function() {
}
Внутри данной функции устанавливаем значение приращения. Будем увеличивать значение на 1 за каждый период времени — вы можете повысить это число, чтобы бегунок двигался быстрее.
value += 1;
Затем добавим полученный результат в индикатор.
addValue = progressbar.val(value);
И показываем значение рядом с индикатором выполнения.
$('.progress-value').html(value + '%');
Далее создаём новую функцию для запуска анимации.
setInterval(function() {
loading();
}, time);
В этот момент анимация уже действует, однако значение будет расти бесконечно. Итак, нужно создать условный оператор для анимации чтобы остановиться, когда анимация достигнет максимального значения.
Сохраним вышеприведённую функцию в переменной.
var animate = setInterval(function() {
loading();
}, time);
Затем внутри переменной loading добавляем условный оператор.
if (value == max) {
clearInterval(animate);
}
Как только значение равно максимальному значению, выполняется функция clearInterval, которая останавливает анимацию.
Вот и все коды для анимации индикатора выполнения.
Вы можете посмотреть демонстрацию и скачать исходные файлы.
Поддержка браузеров
Согласно CanIUse.com, элемент <progress> полностью поддерживается в следующих браузерах: Firefox 16+, Chrome 8+, Safari 6+ и Opera 11+.
Что ещё почитать
Ниже приведено несколько хороших ссылок, чтобы покопаться в этом элементе дальше.
- Cross Browser HTML5 Progress Bar in Depth – User Agent Man
- HTML5 file upload with progress – FileZilla Project
- HTML5 Progress Documentation – W3.org