Анимации В Библиотеке Компонентов: Типы Анимаций, Ux/Ui-Паттерны, Подходы В Angular С Внедрением Зависимостей

Хороший интерактивный дизайн создает положительный пользовательский опыт. Многие компании, создающие библиотеки компонентов, помимо всего прочего пишут документацию с разделами по анимации и даже поставляют готовые пакеты, помогающие строить переходы и движения по их спецификациям.

В этой статье мы рассмотрим виды анимации в веб-приложениях.

Паттерны UX/UI-анимации в дизайн-системах и их реализация в Angular. Также будет показан способ организации анимации в библиотеках с учетом повторного использования и кастомизации.



Анимации в библиотеке компонентов: типы анимаций, UX/UI-паттерны, подходы в Angular с внедрением зависимостей

В предыдущих статьях я писал, что мы документируем в наших библиотеках:

  • типография
  • палитра
  • значки
  • сетка
  • Angular компоненты (компоненты, директивы, пайпы, сервисы)
Недавно мы решили добавить новый раздел - Анимация .

Давайте посмотрим на это.



Цели и принципы проектирования взаимодействия

На этот раз добавлен новый пункт — анимация.

Если предыдущие пункты очевидны, то последнему даже крупные поставщики библиотек не уделяют времени и внимания.

Поэтому сначала мы рассмотрим цели и принципы проектирования взаимодействия в приложениях:

  • Целенаправленный дизайн — это метод, который помогает пользователю достичь цели в приложении.

  • Простота использования – функционал должен быть интуитивно понятным и надежным, тогда пользователь сможет получать удовольствие от работы.

    Да, это справедливо и для анимации.

  • Отображение функциональности — элемент интерфейса должен демонстрировать свое назначение.

  • Обучаемость — интерфейсы, похожие по поведению на другие, более предсказуемы и проще для понимания благодаря предыдущему опыту пользователя.

    Следовательно, анимации также должны быть документированы и пригодны для повторного использования.

  • Обратная связь и время отклика — интерфейсы и компоненты должны мгновенно реагировать на действия пользователя.

    Сюда входит «кажущаяся производительность».

    Длинные операции всегда можно скрыть с помощью анимации.



Виды анимации в браузере

Рассмотрев цели, перейдем к способам создания анимации.

Мы не будем подробно останавливаться на каждом, а наметим пути их оптимизации.

Существует две технологии анимации: css анимация — позволяет анимировать переходы от одной конфигурации стилей CSS к другой.

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

Это улучшит отзывчивость интерфейса.

Подробнее об этом объекте вы можете прочитать в статье связь .

javascript анимация — создавайте более сложные анимации в отличие от CSS.
Чтобы оптимизировать анимацию JavaScript, вам нужно использовать запросАнимацияFrame — сообщает браузеру, что вы хотите анимировать, и просит его запланировать перерисовку следующего кадра анимации.

Чтение подробности по ссылке .



Угловая анимация

Мы не будем останавливаться на подробном описании создания анимаций в этом разделе, потому что.

В Интернете полно статей на эту тему, но давайте зафиксируем ключевые моменты, связанные с Angular, в виде тезисов:

  • Работайте над анимацией JavaScript.
  • Поставляется из коробки с Angular
  • Удобный API для работы с состоянием компонента.

    Вы можете вызвать анимацию для элемента dom, для переменной в шаблоне.

    Создайте цепочку анимаций.

  • Есть инструменты для повторного использования анимации.



Давайте создадим несколько шаблонов анимации UI/UX.

Паттерн: объяснение происходящего (What Just Happened), добавление элемента .

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

Давайте реализуем этот тип шаблона, добавив элемент. Сразу посмотрим на результат:

Анимации в библиотеке компонентов: типы анимаций, UX/UI-паттерны, подходы в Angular с внедрением зависимостей

Добавление элемента анимации Angular Исходный код шаблона:

  
  
  
  
  
  
  
  
  
   

<div class="table"> <div *ngFor='let item of items; index as i; trackBy:id' @fadeExplainMotion [@.

disabled]="isIniting" > .

</div> </div>

Исходный код анимации в компоненте:

animations: [trigger('fadeExplainMotion', [ transition( ':enter', animation([ style({ transform: 'translate(25%,0)', backgroundColor: '#fafafa', height: '30px' }), animate( '300ms cubic-bezier(0.59, 0.32, 0.38, 1.13)', style({ transform: 'translate(0)', height: '82px' }) ), ]) )])]

Опишем, что здесь происходит: @.

неполноценный - отключить анимацию элементов при первой загрузке списка.

@fadeExplainMotion — анимировать элемент при добавлении его в dom. анимация: [.

] — блок, описывающий поведение анимации.

Здесь к dom-элементу применяются преобразования, меняющие заливку и ее высоту.

Также устанавливаются функции времени и движения.

Паттерн: объяснение происходящего (What Just Happened), удаление элемента.

Этот тип анимации похож на предыдущий и выглядит следующим образом:

Анимации в библиотеке компонентов: типы анимаций, UX/UI-паттерны, подходы в Angular с внедрением зависимостей

Удаление элемента анимации Angular Код анимации:

transition( '* => void', animation([ style({ backgroundColor: '#fafafa', height: '82px' }), animate( 300ms cubic-bezier(0.59, 0.32, 0.38, 1.13), style({ transform: 'translate(-25%,0)', height: '82px' }) ), ])

Код очень похож, за исключением: * => недействительно - реагировать на удаление элемента из dom Transform: 'перевести(-25%,0) - сдвигает элемент справа налево Отлично, мы написали пару анимаций для компонента.

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

Читайте дальше, чтобы узнать, как это сделать.



Давайте сделаем анимацию многоразовой и настраиваемой для пользователей библиотеки с помощью внедрения зависимостей.

Изучив множество библиотек компонентов, можно сделать вывод, что анимацию удобно хранить в каталоге «animation».

Например, так делают ребята из TaigaUI и NgZorro. Нам этот способ тоже показался удобным.

Давайте добавим файл «fade-explain.ts», который экспортирует анимацию выше:

const TRANSITION = '{{duration}}ms cubic-bezier(0.59, 0.32, 0.38, 1.13)'; const DURATION = {params: {duration: 300}}; export const fadeExplainMotion: AnimationTriggerMetadata = trigger('fadeExplainMotion', [ transition( ':enter', animation([ style({ transform: 'translate(25%,0)', backgroundColor: '#fafafa', height: '30px' }), animate( TRANSITION, style({ transform: 'translate(0)', height: '82px' }) ), ]), DURATION ), transition( '* => void', animation([ style({ backgroundColor: '#fafafa', height: '82px' }), animate( TRANSITION, style({ transform: 'translate(-25%,0)', height: '82px' }) ), ]) ) ]);

Теперь метаданные компонента будут выглядеть так: анимацию можно подключить к любым компонентам:

@Component({ selector: 'app-list', templateUrl: '.

/list.component.html', styleUrls: ['.

/list.component.scss'], animations: [fadeExplainMotion, fadeExplainEditMotion, .

], })

Этот пример демонстрирует повторное использование.

Давайте добавим возможность пользователям библиотеки компонентов изменять параметры анимации, например скорость.

Для этого воспользуемся механизмом внедрение зависимости .

  1. создайте файл "animation-tokens.ts"
  2. Давайте напишем реализацию ANIMATIONS_DURATION.


export const ANIMATIONS_DURATION = new InjectionToken<number>( 'Duration of animations in ms', { factory: () => 300, }, );

Давайте получим токен в конструкторе компонента:

constructor(@Inject(ANIMATIONS_DURATION) private readonly duration: number,) {

Создадим переменную в компоненте:

animation = { value: '', params: { duration: this.duration } };

Привяжем переменную к анимации в шаблоне:

<div *ngFor='let item of items; index as i; trackBy:id' [@fadeExplainMotion]='animation' >

Чтобы изменить параметр скорости анимации, необходимо добавить в модуль новое значение токена (в разделе провайдеры):

providers: [ { provide: ANIMATIONS_DURATION, useValue: 350 } ],

Теперь вся команда может использовать согласованные анимации и при необходимости переопределять их настройки.

Пример из статьи можно найти связь .

Подборка книг и интересных статей по интерфейсной анимации: Недавно провел онлайн мастер-класс» Роман Седов и Александр Инкин | Мастерская | ДИ: две буквы, безграничные возможности.

", в котором было несколько слайдов об анимации и DI. Интерактивный дизайн и сложная анимация - в этой книге вы сможете найти фундаментальные принципы интерактивного дизайна и анимации.

Электронная книга «Анимация в системе дизайна» - в книге рассказывается об анимации в дизайн-системах.

Подробное руководство по анимации в Angular — в статье подробно описана анимация в Angular. Angular UX с использованием 4 методов анимации — статья с большим набором видеороликов о UX/UI и анимации в Angular.

Заключение

В этой статье мы определили роль анимации в системах дизайна и библиотеках компонентов.

Мы выделили моменты, связанные с их оптимизацией.

Мы рассмотрели шаблоны анимации.

Мы реализовали пару примеров в Angular. И мы использовали механизм внедрения зависимостей для повторного использования и настройки.

Теги: #Разработка сайтов #CSS #JavaScript #ui/ux #angular #анимация #библиотека компонентов

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.