Меню
Поиск

Интерфейс и визуал · Анимация и микровзаимодействия

Как добавить переход, который объясняет изменение

Переход в интерфейсе нужен не для красоты: он показывает, что изменилось, откуда появился элемент и куда делся. В уроке разберём, чем полезный переход отличается от украшения, как подобрать длительность под размер изменения, когда брать плавное начало, а когда плавный конец, почему не стоит анимировать то, что делают по сто раз в день, и как описать анимацию для разработки. Для практики — приложение магазина кофе, проигрыватель длительностей и кривых, поиск лишних анимаций и тренажёр «какую кривую взять».

Пример для всего урока. Приложение того же магазина кофе, что и в темах про типографику и цвет. В нём три изменения, с которыми вы будете работать весь урок: товар попадает в корзину, снизу выезжает шторка фильтров, в настройках включается автоповтор заказа. Образцы двигаются, только когда вы нажимаете «Проиграть».
У вас включена настройка «уменьшить движение». Образцы в этом уроке всё равно двигаются, когда вы нажимаете «Проиграть»: без этого урок про движение не показать. Сами они не стартуют, и самый длинный идёт секунду.

1Переход объясняет, что изменилось

Изменение без перехода легко пропустить: число в углу стало другим, а взгляд был на кнопке.

Человек нажимает «В корзину» и смотрит на кнопку. Счётчик корзины — в шапке, в другом конце экрана.

Без перехода число меняется молча. С переходом старое число уходит вверх, новое приходит снизу, а внизу появляется плашка «Добавлено в корзину».

Нажмите «Проиграть» под каждым экраном и сравните.

Товар в корзину · без перехода и с переходом

Без перехода

КаталогКорзина 23
фотоЭфиопия, 250 г890 ₽В корзину
фотоКения, 250 г960 ₽В корзину
Добавлено в корзину

С переходом

КаталогКорзина 23
фотоЭфиопия, 250 г890 ₽В корзину
фотоКения, 250 г960 ₽В корзину
Добавлено в корзину
Движение притягивает взгляд туда, где что-то изменилось. Слева счётчик сменился незаметно, справа видно, что в корзине стало на один товар больше.

Подсказка или украшение

Переход подсказывает: что изменилось, откуда появился элемент, куда он делся.

Украшение ничего не объясняет, оно только двигается.

Переход объясняетУкрашение
Шторка выезжает снизу: видно, откуда она взялась и куда её убратьЛоготип крутится при каждом открытии приложения
Удалённый товар уезжает, список смыкается: видно, что пропалоКарточки товаров подпрыгивают при прокрутке
Число в счётчике сменяется с движением: видно, что оно новоеКнопка «Оформить» переливается, чтобы на неё нажали
Про каждый переход можно закончить фразу «он показывает, что …». Если фраза не складывается, это украшение. Его место — заставка или пустой экран, а не там, где человек работает.

2Длительность: мелкое быстрее, крупное дольше

Чем больше элемент и чем дальше он едет, тем больше времени нужно глазу, чтобы проследить путь.

Ручка переключателя проезжает пару сантиметров, и ей хватает десятой доли секунды.

Шторка фильтров выезжает на полэкрана — за то же время она только мелькнёт.

Выберите длительность и сравните оба элемента.

Переключатель и шторка · одна длительность на двоих

Переключатель: едет на ширину ручки

←Настройки
Автоповтор заказа
Раз в месяц тот же кофе

Шторка: выезжает на полэкрана

Кофе в зёрнахФильтры
фото
фото
Фильтры
ЗёрнаМолотыйКапсулы
Показать 24 товара
На 100 мс переключатель щёлкает как надо, а шторка мелькает. На 500 мс шторка ещё терпима, а переключатель уже тянется. На секунде ждать приходится обоим.

Точной формулы нет, но есть ориентиры. Их дают Nielsen Norman Group и руководство Material Design:

Что меняетсяПримерДлительность
Мелкое изменение на местеПереключатель, флажок, число в счётчикеоколо 100 мс
Небольшой элемент появляется или уходитПодсказка, меню, плашка «Добавлено»150–250 мс
Крупный элементШторка, диалог200–300 мс
Смена всего экранаПереход к оформлению заказа300–400 мс
Больше полусекунды — почти всегда слишком долго. По наблюдениям NN/g, на 500 мс анимация уже ощущается как помеха, а в большинстве случаев хватает 100–400 мс. Человек ждёт, пока доиграет анимация, вместо того чтобы продолжать работу.

Уход короче появления

Появившийся элемент человек рассматривает, а на уходящий уже не смотрит. Плашка из примера выше появляется за 250 мс, а уходит за 200.

3Плавное начало и плавный конец

Кривая говорит, как меняется скорость по дороге. В жизни ничто не трогается и не останавливается мгновенно.

Длительность отвечает на вопрос «сколько», кривая — «как».

Вот четыре основные кривые. Точки проходят дорожку за одно и то же время.

Четыре кривые · одна длительность, 1000 мс
Равномерно · linear
Плавное начало · ease-in
Плавный конец · ease-out
Разгон и торможение · ease-in-out
Все четыре точки выезжают и приезжают одновременно. Разница в том, где они быстрее: в начале пути, в конце или посередине. Секунда здесь нужна, чтобы разницу было видно. В интерфейсе столько обычно не нужно.
КриваяКак движетсяДля чего
Плавный конец
ease-out
Сразу срывается с места и мягко тормозитПоявление: элемент сразу откликается и аккуратно встаёт на место
Плавное начало
ease-in
Медленно трогается и разгоняется к концуУход с экрана: резкого конца не видно, элемент уже за краем
Разгон и торможение
ease-in-out
Трогается, разгоняется, тормозитПеремещение внутри экрана, когда видны и старт, и финиш
Равномерно
linear
Одна скорость от начала до концаТо, что движется без остановки: вращение индикатора загрузки, полоса прогресса

Почему не наоборот

Это видно на шторке. Слева она появляется с плавным концом, справа с плавным началом. Длительность одна, 300 мс.

Шторка · плавный конец и плавное начало

Плавный конец, ease-out

Кофе в зёрнахФильтры
фото
фото
Фильтры
Показать 24 товара

Плавное начало, ease-in

Кофе в зёрнахФильтры
фото
фото
Фильтры
Показать 24 товара
Слева шторка откликается сразу и спокойно встаёт на место. Справа она сначала медлит, будто нажатие не сработало, а потом с разгона резко встаёт на место.
Появляется — плавный конец. Уходит — плавное начало. Двигается по экрану — разгон и торможение. Равномерное движение оставьте тому, что крутится или ползёт без остановки.

В CSS эти кривые так и называются: ease-out, ease-in, ease-in-out, linear. В прототипе Figma — Ease out, Ease in, Ease in and out, Linear. Кривая по умолчанию в CSS — ease: быстрый старт и долгое торможение.

4Что не анимировать

То, что человек делает по сто раз в день, должно происходить сразу.

Переход в 300 мс незаметен, если увидеть его один раз.

Если переключать вкладки сорок раз за вечер, это уже двенадцать секунд ожидания и ощущение, что приложение тормозит.

Второе, что не нужно анимировать, — движение без изменения: оно ничего не объясняет и отвлекает от дела.

Найдите лишние анимации

Ниже анимации, которые команда магазина собрала в одном списке. Пять из них мешают.

Нажимайте на строки, которые убрали бы или переделали: в разборе будет, что с ними не так.

Анимации приложения · найдите лишние
  • Заставка с логотипомпри каждом запуске · 2000 мс
  • Шторка фильтров выезжает снизупо нажатию «Фильтры» · 250 мс
  • Вкладки «Кофе / Чай / Посуда» перелистываются вбокпри каждом переключении · 400 мс
  • Удалённый товар уезжает влево, список смыкаетсяпо нажатию «Удалить» · 250 мс
  • Карточки каталога въезжают по однойпри каждом открытии раздела · 12 карточек по 100 мс
  • Отметка «✓ Оплачен» проявляетсякогда пришла оплата · 150 мс
  • Кнопка «Оформить» мягко пульсируетвсё время, пока в корзине есть товар
  • Ручка переключателя «Автоповтор»по нажатию · 100 мс
  • Число в счётчике корзины сменяетсякогда товар добавлен · 200 мс
  • Меню профиля раскрываетсяпо нажатию на аватар · 600 мс
  1. Заставка с логотипом, 2 секунды при каждом запуске.Убрать. Каждое открытие начинается с ожидания, хотя человек пришёл за кофе. Если приложению нужно время на загрузку, заставка держится ровно столько, сколько идёт загрузка, а не лишние секунды.
  2. Шторка фильтров выезжает снизу, 250 мс.Оставить. Шторку открывают не каждую минуту, а движение показывает, откуда она взялась и куда её убрать. Длительность подходит крупному элементу.
  3. Вкладки перелистываются вбок, 400 мс.Переделать. Вкладки переключают постоянно, и каждый раз приходится ждать. Содержимое вкладки показывайте сразу, в крайнем случае с короткой сменой прозрачности. Двигаться может только полоска под выбранной вкладкой.
  4. Удалённый товар уезжает влево, список смыкается, 250 мс.Оставить. Без движения строка просто пропадёт, и человек не сразу поймёт, что именно удалилось. Движение это показывает.
  5. Карточки каталога въезжают по одной.Убрать. Двенадцать карточек по очереди — больше секунды до того, как видна вся витрина, и так при каждом открытии раздела. Это украшение в самом частом месте приложения.
  6. Отметка «Оплачен» проявляется, 150 мс.Оставить. Статус сменился не по нажатию, а сам, и короткое проявление помогает это заметить.
  7. Кнопка «Оформить» всё время пульсирует.Убрать. Ничего не изменилось, а кнопка двигается: это отвлекает от чтения и ничего не объясняет. Бесконечное движение к тому же мешает людям, которым трудно сосредоточиться.
  8. Ручка переключателя, 100 мс.Оставить. Переключают часто, но 100 мс не заставляют ждать, а движение ручки показывает новое положение.
  9. Число в счётчике корзины сменяется, 200 мс.Оставить. Это тот самый переход из начала урока: без него добавление в корзину легко пропустить.
  10. Меню профиля раскрывается, 600 мс.Сократить. Меню — небольшой элемент, ему хватает 150–200 мс. 600 мс — втрое дольше, и меню открывают часто.

Все пять найдены. Лишними оказались украшения и медленные переходы там, где человек бывает чаще всего. Полезные переходы остались, и все они короче трети секунды.

Нужные анимации тоже можно нажать: вы прочитаете, почему там всё в порядке, а счётчик «Найдено» не изменится.
Чем чаще действие, тем короче переход. Для самого частого — ноль: изменение происходит сразу.

5Как описать анимацию для разработки

Разработке нужна не гифка, а ответы на пять вопросов: что, откуда, куда, сколько и по какой кривой.

Прототип показывает, как это выглядит, но числа из него приходится угадывать.

Опишите каждую анимацию таблицей. Вот плашка «Добавлено в корзину» из начала урока:

ВопросПлашка «Добавлено в корзину»
КогдаТовар добавлен в корзину после нажатия «В корзину»
ЧтоПлашка с текстом «Добавлено в корзину»
ОткудаИз-за нижнего края экрана, прозрачная
КудаНа 16 px выше нижнего края, непрозрачная
Сколько250 мс
КриваяПлавный конец, ease-out
УходЧерез 3 секунды: вниз за край, 200 мс, плавное начало, ease-in

В Figma длительность и кривая задаются в панели прототипа у каждого перехода, длительность — в миллисекундах. Перенесите эти числа в описание, а не отправляйте ссылку со словами «как в прототипе».

Описание готово, если по нему можно повторить анимацию, не открывая прототип.

6Какую кривую взять

Сначала решите, что делает элемент: появляется, уходит, едет по экрану или крутится. Кривая следует из ответа.

Тренажёр · какую кривую взять
  1. Шторка фильтров выезжает снизу.

  2. Плашка «Добавлено в корзину» уезжает вниз и исчезает.

  3. Полоска под выбранной вкладкой переезжает с «Кофе» на «Чай».

  4. Индикатор загрузки крутится, пока приходит список заказов.

  5. Содержимое вкладок «Кофе» и «Чай», которые переключают десятки раз за визит.

  6. Подсказка «Можно оплатить частями» появляется над кнопкой.

  7. Диалог «Удалить товар?» закрывается после нажатия «Отмена».

  8. Полоса отправки фотографии для отзыва заполняется слева направо.

Сначала ответьте себе, что делает элемент: появляется, уходит, едет по экрану или движется без остановки. И не забывайте про вариант «без анимации».

7Задание

Возьмите три перехода своего экрана и соберите их с осмысленными длительностями. Напишите по строке на каждый: что он объясняет.

Часть 1 · Найти переходы, 15 минут

  1. Выберите экран или короткий сценарий, где что-то появляется, уходит или меняется: корзина, фильтры, форма.
  2. Выпишите все изменения на этом экране, даже те, что сейчас происходят без движения.
  3. Про каждое спросите, что человек должен понять. Отметьте, как часто это изменение случается.
  4. Выберите три, где движение объясняет больше всего.
Три перехода · заполните по каждому
ЭКРАН: ______________________        Дата: __.__.____

ПЕРЕХОД 1: ______________________
он показывает, что ______________________________
когда: ______________   как часто: редко / часто / постоянно
откуда: ______________   куда: ______________
длительность: ___ мс   кривая: плавный конец / плавное начало / разгон и торможение / равномерно
уход: ___ мс, кривая: ______________

ПЕРЕХОД 2: ______________________
он показывает, что ______________________________
когда: ______________   как часто: редко / часто / постоянно
откуда: ______________   куда: ______________
длительность: ___ мс   кривая: ______________
уход: ___ мс, кривая: ______________

ПЕРЕХОД 3: ______________________
он показывает, что ______________________________
когда: ______________   как часто: редко / часто / постоянно
откуда: ______________   куда: ______________
длительность: ___ мс   кривая: ______________
уход: ___ мс, кривая: ______________

УБРАЛ (украшения и частые действия): ______________________
Строку «он показывает, что …» заполняйте первой. Если она не складывается, переход не нужен.

Часть 2 · Собрать в прототипе, 40 минут

  1. Соберите три перехода в прототипе: в Figma через Smart animate или в Jitter.
  2. Подберите длительность по таблице из урока: мелкое — около 100 мс, крупное — до 300 мс.
  3. Проверьте кривые: появление — плавный конец, уход — плавное начало, перемещение — разгон и торможение.
  4. Посмотрите на телефоне, а не только в редакторе. Если ждёте конца анимации — сократите. Если не успели понять, что произошло, — удлините.

Часть 3 · Описать, 15 минут

  1. Заполните шаблон по каждому переходу.
  2. Перечитайте строки «он показывает, что …». Если какая-то звучит как «чтобы было красиво», уберите этот переход.
  3. Отдайте описание разработчику и спросите, всё ли понятно без прототипа.
Как понять, что задание выполнено. Для каждого перехода можно назвать, что именно он помогает понять. Переходов «для красоты» не осталось.

Что должно получиться

  • Прототип с тремя переходами.
  • Заполненный шаблон по каждому.
  • Список убранного: украшения и переходы в частых действиях.

План работы: 15 минут на поиск переходов, 40 на прототип, 15 на описание. Всего — чуть больше часа.

Частые сложности

  • «В редакторе уже стоит длительность по умолчанию». Число по умолчанию — не решение. Проверьте его по размеру изменения: переключателю и шторке оно не может подойти одновременно.
  • «Без анимации экран выглядит мёртвым». Живым его делает отклик на действие: нажал — что-то ответило. Движение ради движения этого не даёт.
  • «Разработка скажет, что это долго делать». Переход по прозрачности или сдвигу с длительностью и кривой — одна строка кода. Долго делать то, что описано словами «как в прототипе».
  • «Не знаю, какая длительность правильная». Начните с таблицы из урока и смотрите на телефоне. Правильная та, при которой успеваешь понять, что произошло, и не успеваешь заскучать.

8Чек-лист и ошибки

Переход готов, если

  • Про него можно закончить фразу «он показывает, что …»
  • Длительность соответствует размеру: мелкое быстрее, крупное дольше
  • Переход длиннее полусекунды — только с причиной
  • Появление с плавным концом, уход с плавным началом
  • Уход короче появления
  • Частые действия происходят сразу
  • Записаны когда, что, откуда, куда, сколько и кривая
  • Переход посмотрен на телефоне, а не только в редакторе

Что мешает

  • Движение ради живости. Кнопка пульсирует, логотип крутится, а объяснять нечего.
  • Одна длительность на всё. Переключатель тянется, шторка мелькает.
  • Равномерное появление. Элемент едет как по рельсам и встаёт с ударом.
  • Долгий переход в частом действии. Человек ждёт анимацию каждый раз.
  • «Смотрите в прототипе». Разработка угадывает числа и угадывает не те.

9Три ступени темы

В этом уроке учимся добавлять переходы и подбирать им длительность. На следующих ступенях — связывать движением состояния, работать с общим набором параметров и настройкой «уменьшить движение», а потом описывать правила движения для всей команды.

СтупеньЧто нужно уметьКак проверить результат
Junior — этот урок Отличать переход, который объясняет, от украшения; подбирать длительность под размер; выбирать кривую; не анимировать частое; описывать анимацию для разработки Для каждого перехода можно назвать, что он помогает понять, переходов «для красоты» не осталось
Middle Показывать движением, откуда появилось и куда исчезло; брать длительности и кривые из общего набора; учитывать «уменьшить движение»; помнить про медленную сеть и слабые телефоны При включённой системной настройке интерфейс остаётся полностью работающим и понятным без движения
Senior Описать правила движения продукта: что анимируем и зачем, токены длительностей и кривых, что при «уменьшить движение», как проверяем производительность Спор об анимации в команде закрыт ссылкой на правило
Ориентир по этой теме: про любое движение на экране вы можете сказать, что оно объясняет и почему оно такой длины.

Что почитать дальше

  • Executing UX Animations: Duration and Motion CharacteristicsNielsen Norman Group, Пейдж Лаубхаймер · на английском · бесплатноСколько миллисекунд давать переключателю и модальному окну, с какой длительности анимация начинает мешать, почему на вход берут плавный конец, а на выход плавное начало, и как описать анимацию для разработки. Статья 2020 года.
  • The Role of Animation and Motion in UXNielsen Norman Group, Пейдж Лаубхаймер · на английском · бесплатноЧетыре задачи движения — отклик на действие, смена состояния, направление в навигации, подсказка жеста — и где движение уже перехватывает внимание. Пример со счётчиком корзины, который без анимации не замечают, тот же, что в начале урока. Статья 2020 года.
  • SpeedMaterial Design, вторая версия · на английском · бесплатноДлительности на примерах компонентов — переключатель, боковая панель, карточка, — почему уход короче появления и какие кривые брать на вход и на выход. Архивная вторая версия Material.
  • Prototype easing and spring animationsFigma · справка на английском · бесплатноСемь готовых кривых прототипа Figma и когда какая уместна, своя кривая с числами для CSS cubic-bezier и четыре пружины с настройками жёсткости, затухания и массы. Свою кривую не сохранить: числа переносят вручную.
  • Jitterинструмент · на английском · есть бесплатный тарифСобрать переходы из задания с точными длительностями и кривыми и скопировать кривую для разработки в CSS. Результат — видео, GIF или Lottie, а не кликабельный прототип; бесплатно — три файла и выгрузка 720p с водяным знаком.