что и когда использовать — Офтоп на DTF
Хотя ответ очевиден, кого-то выбор того или иного индикатора загрузки ставит в тупик. Разбираемся, когда стоит использовать каждый из них.
{«id»:174240,»url»:»https:\/\/dtf.ru\/flood\/174240-progress-bar-ili-spinner-chto-i-kogda-ispolzovat»,»title»:»\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0411\u0430\u0440 \u0438\u043b\u0438 \u0421\u043f\u0438\u043d\u043d\u0435\u0440: \u0447\u0442\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c»,»services»:{«vkontakte»:{«url»:»https:\/\/vk.com\/share.php?url=https:\/\/dtf.ru\/flood\/174240-progress-bar-ili-spinner-chto-i-kogda-ispolzovat&title=\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0411\u0430\u0440 \u0438\u043b\u0438 \u0421\u043f\u0438\u043d\u043d\u0435\u0440: \u0447\u0442\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c»,»short_name»:»VK»,»title»:»\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435″,»width»:600,»height»:450},»facebook»:{«url»:»https:\/\/www.facebook.com\/sharer\/sharer.php?u=https:\/\/dtf.ru\/flood\/174240-progress-bar-ili-spinner-chto-i-kogda-ispolzovat»,»short_name»:»FB»,»title»:»Facebook»,»width»:600,»height»:450},»twitter»:{«url»:»https:\/\/twitter.com\/intent\/tweet?url=https:\/\/dtf.ru\/flood\/174240-progress-bar-ili-spinner-chto-i-kogda-ispolzovat&text=\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0411\u0430\u0440 \u0438\u043b\u0438 \u0421\u043f\u0438\u043d\u043d\u0435\u0440: \u0447\u0442\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c»,»short_name»:»TW»,»title»:»Twitter»,»width»:600,»height»:450},»telegram»:{«url»:»tg:\/\/msg_url?url=https:\/\/dtf.
4867 просмотров
И не забывайте подписываться на мой блог, чтобы у меня была хоть какая-то мотивация 🙃
Спиннеры лучше использовать, когда время загрузки небольшое
Вам ведь не нравится стоять в очереди на одном месте, не продвигаясь вперёд? Так и юзерам не нравится смотреть на спиннеры больше четырёх секунд.
Согласно исследованию, именно столько юзеры готовы терпеть спиннер. Если они вынуждены наблюдать спиннер дольше, то начнут думать, всё ли в порядке с вашим приложением или с их интернет-подключением.
При этом, если время ответа меньше одной секунды, то спиннер можно вообще не показывать.
Прогресс Бары делают длинную загрузку терпимее
Будет логичным предположить, что если время ожидания ответа составляет больше 4 секунд, то стоит использовать прогресс бар. В общем-то, так и есть.
Индикатор процесса (прогресс бар) задаёт чёткие ожидания времени загрузки. Юзеры своими глазами наблюдают прогресс загрузки, что снижает негативные эмоции от ожидания. Спиннер не даёт этого ощущения, он не показывает прогресс и не подталкивает юзера к ожиданию загрузки. Юзеры просто не знают, обрабатывает ли приложение их запрос или просто зависло.
Как показывать прогресс бар
Прогресс бар должен показывать прогресс выполнения их запроса. Он должен быть анимирован слева направо и, по возможности, плавно. Если анимация останавливается на длительное время, юзер может подумать, что прогресс завис и не станут ждать.
В итоге
Казалось бы — всё просто. Загрузка меньше 4 секунд — используй спиннер. Больше — прогресс бар.
Но не всё так однозначно. Ожидаемое время загрузки может колебаться в зависимости от производительности, пропускной способности канала и ещё целой кучи факторов. В итоге мы просто не можем предположить, сколько юзер будет наблюдать загрузку — полторы секунды или тридцать секунд.
Что делать в таких «промежуточных» случаях — тема для отдельной статьи, потому что вариантов много. Например, можно последовать примеру Google и показывать небольшую нотификашку о том, что «процесс занимает дольше, чем ожидалось».
Если вам понравилось — подписывайтесь на мой блог и кидайте деньги в монитор. Жмите на колокольчик, чтобы ничего не пропустить. И выращивайте петрушку. Она полезная.
Отслеживаем прогресс выполнения в Python / Хабр
Человек ранее не использовавший индикаторы прогресса может предположить, что их внедрение может сильно усложнить код. К счастью, это не так. Небольшие примеры ниже покажут, как быстро и просто начать отслеживать прогресс в консоли или в интерфейсе быстро набирающей популярность графической библиотеки PySimpleGUI.
Первым у нас идёт модуль Progress.
Всё, что от вас потребуется, это указать количество ожидаемых итераций, тип индикатора и вызывать функцию при каждой итерации:
import time
from progress.bar import IncrementalBar
mylist = [1,2,3,4,5,6,7,8]
bar = IncrementalBar('Countdown', max = len(mylist))
for item in mylist:
bar.next()
time.sleep(1)
bar.finish()
Результат работы:
Есть индикаторы на любой вкус:
Следующей на очереди идёт библиотека tqdm.
Быстрый и расширяемый индикатор прогресса для Python и CLI
Всего один вызов функции понадобится для получения результата аналогичного предыдущему:
import time
from tqdm import tqdm
mylist = [1,2,3,4,5,6,7,8]
for i in tqdm(mylist):
time.sleep(1)
Получаем:
Само собой, в комплекте идёт куча настроек и опций.
Ещё один вариант синтаксиса, побольше дефолтных анимаций, чем в предыдущих примерах:
from alive_progress import alive_bar
import time
mylist = [1,2,3,4,5,6,7,8]
with alive_bar(len(mylist)) as bar:
for i in mylist:
bar()
time. sleep(1)
Результат:
Иногда возникает необходимость предоставить конечному пользователю графический индикатор.
Сколько кода нужно, чтобы достигнуть такого результата? Немного:
import PySimpleGUI as sg
import time
mylist = [1,2,3,4,5,6,7,8]
for i, item in enumerate(mylist):
sg.one_line_progress_meter('This is my progress meter!', i+1, len(mylist), '-key-')
time.sleep(1)
Рассмотрим реализацию индикатора в PySimpleGUI.
Вот как это сделать:
import PySimpleGUI as sg
import time
mylist = [1,2,3,4,5,6,7,8]
progressbar = [
[sg.ProgressBar(len(mylist), orientation='h', size=(51, 10), key='progressbar')]
]
outputwin = [
[sg.Output(size=(78,20))]
]
layout = [
[sg.Frame('Progress',layout= progressbar)],
[sg.Frame('Output', layout = outputwin)],
[sg.Submit('Start'),sg.Cancel()]
]
window = sg.Window('Custom Progress Meter', layout)
progress_bar = window['progressbar']
while True:
event, values = window.read(timeout=10)
if event == 'Cancel' or event is None:
break
elif event == 'Start':
for i,item in enumerate(mylist):
print(item)
time.sleep(1)
progress_bar.UpdateBar(i + 1)
window.close()
Как видите, нет ничего сложного в добавлении информации о прогрессе выполнения: кода немного, а отзывчивость повышается очень сильно. Используйте индикаторы, чтобы больше никогда не гадать, завис ли процесс или нет!
Создание и оформление прогресс бара
Полоса загрузки, состояние загрузки или как его называют — прогресс бар или статус бар. Он может применяться при опросах, при построении графиков, при тех же опросах. В качестве индикатора загрузки страницы, а также в качестве завершенности какой-нибудь операции в процентах. В HTML5 есть специальный тег, который облегчает работу с прогресс баром. А также с помощью CSS3 не составит сложности его оформить по собственному желанию. И в нашем случае нет необходимости использовать изображения, что, несомненно, является большим плюсом.
Реальный пример прогресс бара можно увидеть здесь:
Посмотреть примерСкачать
HTML5 часть — Создание и оформление прогресс бара
В HTML5 присутствует тег <progress>, который значительно облегчает нам работу с прогресс баром. Он имеет атрибут min, max и value. Чтобы он появился на странице, необходимо написать следующее:
1 | <progress value="5" max="100"></progress> |
Когда вы вставите вышеприведенный код в HTML, то увидите прогресс бар, который отображается по умолчанию и с базовыми стилями. Если вы пользовались различными операционными система, то могли заметить, что прогресс бары в них отличаются.
CSS3 часть
А сейчас присвоим собственные стили нашему прогресс бару. В качестве селектора в CSS файле мы будем использовать сам тег progress:
1 2 3 4 5 6 7 | progress { background-color: #f3f3f3; border: 0; width: 80%; height: 18px; border-radius: 9px; } |
Вот, к примеру, вышеприведенный код убирает границу у прогресс бара и фон делает серым.
Для разных браузеров разные селекторы
Дело в том, что чтобы правильно отображался прогресс бар в разных браузерах, необходимо использовать псевдо-селекторы, предназначенные специально для конкретного браузера.
Для Safari и Chrome:
1 2 3 4 5 6 7 | progress::-webkit-progress-bar { /* ваши стили */ } progress::-webkit-progress-value { /* ваши стили */ } |
Для Firefox:
1 2 3 | progress::-moz-progress-bar { /* ваши стили */ } |
А все вместе они выглядят следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 | progress { /* ваши стили */ } progress::-webkit-progress-bar { /* ваши стили */ } progress::-webkit-progress-value { /* ваши стили */ } progress::-moz-progress-bar { /* ваши стили */ } |
Анимация прогресс бара
HTML часть
Следующим шагом будет создание анимации прогресс бара. Итак, прогресс бар заполняется слева направо. То есть начинается когда value=»0″ и заканчивается когда value=»максимум». В качестве примера возьмем следующий код:
1 | <progress value="0" max="100"></progress> |
jQuery часть
Для анимации прогресс бара будем использовать библиотеку jQuery, поэтому ее необходимо сначала подключить:
1 | <script src="js/jquery.js" type="text/javascript"></script> |
Далее пишем скрипт о том, что наш прогресс бар будет заполняться. В первой строке мы определяем тот элемент, который будет заполняться(это и есть прогресс бар), во второй получаем максимум прогресс бара из атрибута max:
1 2 3 4 | var progressbar = $('#progressbar'), max = progressbar.attr('max'), value = progressbar.val(), time = (1000/max)*5; |
Далее создаем переменную, которая будет хранить значение функции анимации:
1 2 3 | var loading = function() { } |
Внутри данной функции мы будем увеличивать заполнение прогресс бара на одну единицу:
А затем присваивать атрибуту value увеличенное значение:
1 | addValue = progressbar.val(value); |
Также мы будем показывать процент загрузки рядом с прогресс баром:
1 | $('.progress-value').html(value + '%'); |
Затем нам нужна функция, которая запустит функцию анимации загрузки:
1 2 3 | setInterval(function() { loading(); }, time); |
На данный момент анимация загрузки работает, но значения будут увеличиваться до бесконечности. Поэтому необходимо создать условия, при котором анимация остановиться, когда прогресс бар полностью заполнится, то есть достигнет максимума.
Будем хранить результат функции в переменной
1 2 3 | var animate = setInterval(function() { loading(); }, time); |
А внутри функции loading напишем условие:
1 2 3 | if (value == max) { clearInterval(animate); } |
Ниже представлен весь код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $(document).ready(function() { if(!Modernizr.meter){ alert('Извините, но Ваш браузер не поддерживает HTML5 прогресс бар!'); } else { var progressbar = $('#progressbar'), max = progressbar.attr('max'), time = (1000/max)*5, value = progressbar.val(); var loading = function() { value += 1; addValue = progressbar.val(value); $('.progress-value').html(value + '%'); if (value == max) { clearInterval(animate); } }; var animate = setInterval(function() { loading(); }, time); }; }); |
Вывод
Данный элемент, если он красиво оформлен, также позволяет выделить ваш сайт. Я уже писал выше где он применяется, но, возможно, вы найдете ему новое предназначение 🙂 .
Успехов!
Источник: http://www.hongkiat.com/blog/html5-progress-bar/
Руководство Bootstrap ProgressBar
Progress Bar (Индикатор процесса) является визуальным компонентом интерфейса для описания прогресса работы, например прогресс скачивания, прогресс установки. Progress Bar позволяет пользователю знать процент завершения работы и оценка времени завершения работы.
Bootstrap предоставляет несколько классов, чтобы вы построили Progress Bar.
- .progress-bar: Данный класс используется для элемента (element), обозначающий прогресс текущей работы.
- .progress: Данный класс используется для элемента обертывающего (wrap) элемент .progress-bar, обозначающий максимальное значение индикатора процесса.
<div> <div role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" > 80% </div> </div>
Объяснение кода:
Атрибут (Attribute) | Описание |
aria-valuemin aria-valuemax aria-valuenow | Минимальное, максимальное и текущее значение прогресса (progress). Данные атрибуты не влияют на отображение длины progress-bar, который вы видите на интерфейсе. Но эти атрибуты позволяют вам получить значение через Javascript. |
style=»width:80%» | Это способ отображения длины (процент) у progress-bar, который вы видите на интерфейсе. |
Смотрите полный пример:
progressbar-example.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Progress Bar Example</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"> </head> <body> <div> <h5>Progress Bar:</h5> <div> <div role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" > 80% </div> </div> </div> <script src="https://code. jquery.com/jquery-3.3.1.slim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script> </body> </html>
Colors:
Вы можете применить фоновый цвет для Progress-bar, ниже является список фоновых цветов определнных заранее в Bootstrap.
- bg-primary
- bg-secondary
- bg-success
- bg-danger
- bg-warning
- bg-info
- bg-light
- bg-dark
- bg-muted
- bg-white
colored-progressbar-example.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Progress Bar Example</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"> <style> .progress { margin: 5px 0px; } </style> </head> <body> <div> <h5>Colored Progress Bars:</h5> <div> <div role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100"> 40% Complete (.bg-success) </div> </div> <div> <div role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"> 50% Complete (.bg-info) </div> </div> <div> <div role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"> 60% Complete (.bg-warning) </div> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script> <script src="https://cdnjs. cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script> </body> </html>
Height:
Вам нужно настроить только высоту для .progress, все .progress-bar внутри так же автоматически поменяют высоту.
Set Height for Progress
<div> <div role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" > </div> </div> <br> <div> <div role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" > </div> </div>
Используйте класс .striped-progress-bar вместе с .progress-bar вы сможете получить индикатор процесса (progress bar) с полосками (Stripe)
Striped Progress Bar
<div> <div role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" > 80% </div> </div>
Комбинируя 2 класса .progress-bar-striped & .progress-bar-animated, вы сможете создать индикатор процесса с анимационным эффектом.
Animated Progress Bar
<div> <div role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" > 80% </div> </div>
Индикаторы процесса (progress-bar) так же могут быть сложены (stack) вместе. Похоже на изображение ниже.
Stacked Progress Bar
<div> <div role="progressbar" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100"> Music 3GB </div> <div role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100"> Video 6GB </div> <div role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"> Picture 4GB </div> </div>
Прогресс бар или спиннер
Как вы будете чувствовать себя когда вы спросили кого либо в магазине про товар, а они просто зависли? Вы вероятно разочаруетесь и пойдете дальше. Пользователи чувствуют подобное когда видят спиннер на экране долгое время
Спиннеры не для длительных процессов
Спиннер не сообщает пользователю как много времени займет процесс загрузки. Если вы используете его для длительных процессов, то будет похоже, что с приложением что то не так. Отсутсвие обратной связи вызывает состояние неопределенности, которое заставляет пользователей предполагать худшее.
Они будут предполагать, что процесс займет много времени и нетерпение вынудит пользователя нажать кнопку возврата или выйти из приложения.
Правило 4 секунд
Если вы хотите удержать пользователя в своем приложении, не используйте спиннеры для процессов которые занимают более 4-х секунд. Проведенные исследования показали, что большинство пользователей терпеливо ожидают около 4-х секунд. Это означает, что их поведение изменится после 4-х секунд.
Когда показывать спиннер
Пользователи ожидают, что приложение будет отвечать немедленно. Немедленный ответ считается ответ пришедший за срок менее одной секунды. Если они не получат визуальный фидбек после одной секунды, то это может стать поводом для волнений.
Если у вас есть процесс который займет время более одной секунды, вы должны показать спиннер. Это скажет пользователю, что загрузка идет и не стоит волноваться
Прогресс бар может сделать длительный процесс допустимым
Если процесс занимает более четырех секунд, вы должны использовать прогресс бар. Пользователи становятся более терпеливыми во время должного ожидания, если видят прогресс бар.
Шкала прогресс бара позволяет пользователю увидеть как походит прогресс и дает представление о том, сколько осталось ждать. Если они увидят спиннер, то они не смогут видеть процесс и не смогут даже узнать, что их запрос был обработан. Это не дает стимула ждать.
Как показывать прогресс бар
Ваш прогресс бар должен анимироваться слева направо. Если анимация зависнет на одном месте слишком на долго, то пользователи могут подумать, что он застрял и они не захотят больше ждать
Вы можете также добавить числовое описание процесса. Если процесс длится менее одной минуты, то покажите процент выполнения или количество загруженных элементов. Проинформируйте тем самым, что приложение работает.
Если же процесс занимает более одной минуты, вы можете показать оставшееся время. Это даст понять пользователю, что процесс может занять долгое время. Отображение чисел в минутах позволит им вернуться в экран после ухода.
Не переборщите со спиннерами
Многие дизайнеры имеют привычку использовать спиннеры на всех процессах, но когда вы используете спиннеры для долгих процессов, вы разочаровываете пользователя. Чтобы избежать этого, используйте прогресс бары.
Прогресс бар делает длительные процессы допустимыми. Пользователь не против подождать, если они знают, что приложение работает, но если процесс занимает больше времени чем ожидалось, то они нуждаются в визуальном отображении процесса.
Оригинал
Круглый прогресс бар на SVG — Блог
Сверстать можно практически что угодно, но иногда реализация дизайнерской задумки может привести к настолько сложной вёрстке, что становится проще “нарисовать” всё необходимое. Есть как минимум два способа это сделать: canvas и SVG-графика. Canvas — это тег HTML5 на котором изображения создаются посредством JavaScript. В отличие от него SVG является языком разметки подобным HTML, а значит имеет знакомый верстальщику вид. Кроме того, для SVG применимы CSS-стили.
Один из примеров удачного использования SVG — создание круглого прогресс бара. Эту задачу можно решить как на чистом CSS, так и с использованием canvas, но мне вариант на SVG кажется наиболее красивым.
Для начала научимся рисовать окружность и её часть.
<html> <head> <style> svg { width: 200px; /* могут быть любыми */ height: 200px; } </style> </head> <body> <svg viewbox="0 0 200 200"> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="#ccc"/> </svg> <svg viewbox="0 0 200 200"> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="orangered" stroke-linecap="round" stroke-dasharray="226 502,4"/> </svg> <svg viewbox="0 0 200 200"> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="orangered" stroke-linecap="round" stroke-dasharray="226 502. 4" stroke-dashoffset="-45" /> </svg> </body> </html>
Код выше описывает svg-документ размерами 200px на 200px, по центру которого нарисована окружность радиусом 80px. Изображение можно легко масштабировать с помощью CSS атрибутов width
и height
, не меняя размеры внутри SVG-тегов. При этом качество векторной графики не пострадает.
Для заполнения части окружности используют пунктирную линию в качестве границы. Параметры пунктира описываются атрибутом stroke-dasharray
, где первый параметр задаёт длину штриха, второй — расстояние между штрихами. Рассчитываются они исходя из длины окружности (L=2πR).
В нашем случае длина окружности радиусом 80 составит 502,4. Тогда 1% будет соответствовать длине пунктира 502,4 / 100 * 1 = 5.
С помощью параметра stroke-dashoffset
можно регулировать смещение пунктира, таким образом начиная отстчёт с любой точки окружности. Значение может задаваться как в абсолютных единицах, так и в процентах.
Наложим эти круги друг на друга и добавим текст.
<html> <head> <style> svg { width: 200px; /* могут быть любыми */ height: 200px; } </style> </head> <body> <svg viewbox="0 0 200 200"> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="#ccc"/> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="orangered" stroke-linecap="round" stroke-dasharray="226 502.4" stroke-dashoffset="-45" /> <text x="100" y="125" font-family="Arial" font-size="70" text-anchor="middle" fill="#444"> 50 </text> </svg> </body> </html>
Обратите внимание, что текст вставляется не внутрь тега circle, а под ним, иначе он не отобразится.
Теперь можно добавить элементы оформления: белый край у линии и тень.
<html> <head> <style> svg { width: 200px; height: 200px; } </style> </head> <body> <svg viewbox="0 0 200 200"> <defs> <filter y="-5"> <feGaussianBlur in="SourceGraphic" stdDeviation="3" y="-"/> </filter> </defs> <circle r="80" cx="95" cy="110" fill="none" stroke-width="12" stroke="#e0e0e0" filter="url(#blurFilter)"> </circle> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="#ccc" stroke-dasharray="502,4 502,4" stroke-linecap="round"> </circle> <circle r="24" cx="172" cy="123" fill="#e0e0e0" stroke-width="0" stroke="#e0e0e0" filter="url(#blurFilter)"> </circle> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="#F3F5F6" stroke-dashoffset="-42" stroke-dasharray="10.5 502.4" stroke-linecap="round"> </circle> <circle r="80" cx="100" cy="100" fill="none" stroke-width="12" stroke="orangered" stroke-linecap="round" stroke-dashoffset="-45" stroke-dasharray="4.5 502.4"> </circle> <text x="100" y="125" font-family="Arial" font-size="70" text-anchor="middle" fill="#444"> 1 </text> <g> <circle r="24" cx="175" cy="120" fill="#F3F5F6" stroke-width="0" stroke="#F3F5F6"/> <circle r="20" cx="175" cy="120" fill="orangered" stroke-width="0" stroke="orangered"/> <text x="175" y="126" font-family="Arial" font-size="18" text-anchor="middle" fill="#fff"> % </text> </g> </svg> </body> </html>
Ссылка на «живой» пример.
Оптимизация прогресс бара: Чем ближе к финишу пользователь, тем выше мотивация достичь его
Эта запись не о множестве визуализаций прогресса, и его назначении. Она о том, как должен работать прогресс бар вопреки очевидному, чтобы улучшить показатели вашего проекта. Для современного рынка этот вопрос достаточно актуален, так как девайсы все мощнее, и загрузки всё тяжелее, пользователи всё требовательнее, и времени у них всё меньше.
Что именно мы хотим улучшить, и как посчитать улучшение:
- Отвалы на загрузке — если заглянуть в аналитику, то можно обнаружить, что в воронке входа на шаге «прелоадер с прогресс баром» отваливается часть пользователей.
К слову: На загрузке Unity-плеера сегодня отваливается более 50% всего трафика - Отвалы в процессе прохождения миссии — если проделанные действия пользователя не достаточны, по его мнению, для приближения к конечной цели.
Результатом оптимизации прогресс баров должно быть увеличение доли пользователей, которые достигают цели (100%)
Рассмотрим приемы модификации прогресс бара на примере загрузки.
Начинать прогресс с 10%
Если декомпозировать визуализацию загрузки на несколько шагов, и посмотреть на долю потерь в начале загрузки, то увидим, что в начале отпадает немалая доля игроков, которых разочаровал сам факт загрузки. Эти игроки спешат, и в данный момент не готовы тратить время на загрузку. Чтобы сохранить их, отображаем с самого начала прогресс, не меньше чем 5% (встречал даже 50%). Игрок видит, что в процесс загрузки он уже инвестировал часть своего ресурса (времени), и не хочет терять вложенное. Включается когнитивное искажение — неприятие потери, и игрок защищая свои инвестиции, ожидает всей загрузки.
Динамика загрузки не линейна
Вторая весомая доля отвала — доля игроков, разочаровавшихся в скорости загрузки. Независимо от скорости интернета, загрузки или производительности железа мы можем обнадежить игрока, визуализировав загрузку первых 50% очень быстро, не смотря на то, что загружена по факту всего десятая часть.
Окончание визуализации прогресса
Остановив прогресс бар на 99%, докачайте последние 10-15% общего объема, так вы еще снизите потери. При виде 99% загрузки редкий пользователь закроет приложение. С другой стороны, если вы покажите 100%, а загрузка продолжает длится — рискуете вызвать негатив.
Обвесы для прогресс бара
Самые длинные загрузки — это первая загрузка приложения, обновления и подгрузки компонентов. Такие загрузки требуют нестандартного подхода и обвесов, которые будут развлекать игрока в момент ожидания
- Игровые подсказки, советы, интересные факты об игре. Первый раз встретил этот прием в С.Т.А.Л.К.Е.Р.е, в загрузке соседней локации. «100 фактов о зоне» были не только интересны, они дополняли внутреигровую атмосферу и выполняли функцию подсказок. Мне даже хотелось прочесть все 100, и я немного расстраивался, когда они повторялись.
- Меняющийся прелоадер позволит отвлечь игрока от процесса, и перехватит внимание на графические компоненты.
- Мини игра во время загрузки также призвана развлечь игрока. Так в одном баббл шутере, на прелоадере уровня, появлялись мыльные пузыри, и пользователь лопал их мышкой или пальцем.
Эти правила работают не только для загрузок, но и для визуализации прогресса прохождения уровня, наполнения ресурсов, прокачки скиллов. Даже для сложных многоуровневых процессов можно использовать эти советы.
Итого, в TODO
- Посмотреть отвалы на загрузках
- Прокачать визуализацию прогресс баров в своем приложении
- Добавить на прелоадер обвесы
- Посмотреть отвалы после оптимизации
- Сказать спасибо автору
Если вам и это не помогло — оптимизируйте код =))
Поделись с коллегами:Индикатор выполнения начальной загрузки
Базовая шкала прогресса
Индикатор выполнения может использоваться, чтобы показать пользователю, как далеко он / она находится в процесс.
Bootstrap предоставляет несколько типов индикаторов выполнения.
Индикатор выполнения по умолчанию в Bootstrap выглядит так:
Чтобы создать индикатор выполнения по умолчанию, добавьте класс .progress
к элементу Пример
aria-valuemin = «0» aria-valuemax = «100»>
70% завершено
Примечание: Индикаторы выполнения не поддерживаются в Internet Explorer 9 и ранее (потому что они используют переходы и анимацию CSS3 для достижения некоторых из их эффекты).
Примечание: Для улучшения доступности для людям, использующим программы чтения с экрана, вы должны включить атрибуты aria- *.
Индикатор выполнения с этикеткой
Индикатор выполнения с меткой выглядит так:
Удалите класс .sr-only
из индикатора выполнения, чтобы отобразить видимый процент:
Пример
aria-valuemin = «0» aria-valuemax = «100»>
70%