Установка UI Pack

UI Pack расширяет возможности Velocity.js, добавляя набор предустановленных эффектов переходов и утилит для анимаций интерфейса. Базовая библиотека Velocity ориентирована на высокопроизводительное управление анимациями DOM, тогда как UI Pack предоставляет слой готовых анимационных паттернов: появления, исчезновения, переходы страниц, последовательности и сложные сценические эффекты.

UI Pack не является самостоятельной библиотекой и работает только поверх Velocity. В современных сборках используется пакет velocity-animate, который содержит ядро анимационного движка.

Ключевое требование — наличие установленного Velocity:

  • ядро анимаций (velocity-animate)
  • UI Pack как расширение (velocity-animate/velocity.ui или отдельный модуль в зависимости от сборки)

При подключении через модульную систему важно учитывать, что UI Pack регистрирует дополнительные эффекты внутри глобального реестра Velocity. Это означает, что порядок инициализации критичен: сначала загружается ядро, затем расширение.

Установка через npm

В среде Node.js или сборщиках вроде Webpack, Vite или Rollup установка выполняется через пакетный менеджер.

npm install velocity-animate

После установки подключение UI Pack выполняется одним из способов, зависящих от версии пакета.

Подключение как модуль

import Velocity from "velocity-animate";
import "velocity-animate/velocity.ui";

После импорта UI Pack автоматически регистрирует набор эффектов внутри экземпляра Velocity. Дополнительной инициализации не требуется.

Особенности ESM-окружения

В проектах с ES Modules важно учитывать, что UI Pack может изменять прототип Velocity глобально. Это означает, что при нескольких экземплярах Velocity в разных частях приложения эффекты могут быть недоступны, если импорт выполнен не в корневом модуле.

Подключение через CDN

Для проектов без сборщика используется подключение через script-теги. Порядок подключения строго фиксирован.

<script src="https://cdn.jsdelivr.net/npm/velocity-animate@2/velocity.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/velocity-animate@2/velocity.ui.min.js"></script>

Первым загружается ядро, затем UI Pack. Нарушение порядка приводит к отсутствию регистрации эффектов.

После загрузки UI Pack расширяет глобальный объект Velocity новыми предустановленными анимациями.

Структура UI Pack

UI Pack добавляет несколько категорий анимаций:

  • Transition In (появление элементов)
  • Transition Out (исчезновение элементов)
  • Transition Flip (перевороты и смена состояний)
  • Sequence (последовательные анимации)
  • Calls (встроенные цепочки вызовов)

Каждая категория представляет собой именованные эффекты, которые передаются как строковый параметр в Velocity.

Пример использования:

Velocity(element, "transition.fadeIn", { duration: 300 });

Или:

Velocity(element, "transition.slideUpIn", { duration: 400 });

Регистрация эффектов внутри Velocity

UI Pack работает через расширение внутреннего реестра эффектов Velocity. При подключении выполняется регистрация набора предопределённых ключей.

Каждый эффект представляет собой объект конфигурации:

  • свойства анимации CSS (opacity, translate, scale)
  • временные параметры (duration, easing)
  • последовательность ключевых кадров
  • опциональные обратные вызовы

Эти эффекты становятся доступны как строковые идентификаторы, что упрощает вызов и стандартизирует анимации интерфейса.

Подключение отдельных частей UI Pack

В некоторых сборках UI Pack может быть разбит на модули. Это позволяет уменьшить размер бандла за счёт подключения только необходимых эффектов.

Пример частичной загрузки:

import Velocity from "velocity-animate";
import "velocity-animate/velocity.ui/pack/fade";
import "velocity-animate/velocity.ui/pack/slide";

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

Глобальная интеграция в браузере

При подключении через CDN UI Pack автоматически добавляет методы в глобальный объект Velocity. Это означает, что любые DOM-элементы становятся анимируемыми без дополнительной настройки.

Пример:

Velocity(document.querySelector(".box"), "transition.expandIn", 500);

Расширение также добавляет поддержку последовательностей:

Velocity(document.querySelectorAll(".item"), "transition.staggerIn", {
  stagger: 100
});

Особенности порядка загрузки

UI Pack зависит от внутреннего API регистрации эффектов. При неправильной последовательности загрузки возникают следующие проблемы:

  • эффекты возвращают ошибку “Unknown effect”
  • Velocity выполняет fallback к стандартной анимации
  • последовательности игнорируются

Корректный порядок:

  1. ядро Velocity
  2. UI Pack
  3. пользовательские расширения (если есть)

Интеграция с сборщиками модулей

В Webpack или Vite UI Pack может попадать в основной бандл или быть выделен в отдельный chunk.

Пример конфигурации импорта:

import Velocity from "velocity-animate";
import "velocity-animate/velocity.ui";

Для ленивой загрузки можно использовать динамический импорт:

const loadUI = async () => {
  await import("velocity-animate/velocity.ui");
};

После выполнения такого импорта эффекты становятся доступны глобально в рамках текущего контекста выполнения.

Расширение набора эффектов

UI Pack не ограничивает возможность добавления собственных анимаций. Новые эффекты могут регистрироваться поверх существующего API Velocity:

Velocity.RegisterEffect("custom.bounceIn", {
  defaultDuration: 600,
  calls: [
    [{ scale: 1.2 }, 0.5],
    [{ scale: 1 }, 0.5]
  ]
});

После регистрации такой эффект становится доступен наравне со встроенными UI Pack эффектами.

Совместимость с цепочками анимаций

UI Pack тесно интегрирован с системой chaining Velocity. Это позволяет выстраивать сложные сценарии без ручного управления таймингами.

Velocity(element, "transition.fadeIn")
  .then(() => Velocity(element, "transition.flipXIn"))
  .then(() => Velocity(element, "transition.shrinkOut"));

UI Pack обеспечивает корректную работу цепочек за счёт синхронизации промисов и callback-механизма Velocity.

Управление производительностью

UI Pack использует те же оптимизации, что и ядро Velocity:

  • аппаратное ускорение через transform
  • минимизация layout thrashing
  • кэширование вычисленных свойств
  • batching DOM операций

При подключении большого количества UI эффектов важно учитывать, что каждый дополнительный пакет увеличивает размер JavaScript-бандла, но не влияет напрямую на runtime-производительность, так как эффекты компилируются в момент выполнения.

Работа с fallback-анимациями

Если CSS-свойство не поддерживается браузером, Velocity автоматически заменяет его аналогом или пропускает анимацию. UI Pack наследует эту модель, добавляя предопределённые безопасные комбинации свойств.

Пример:

  • transform заменяется на translate/scale
  • opacity используется как базовый fallback для появления/исчезновения
  • сложные 3D-эффекты упрощаются до 2D-версий

Расширенные сценарии использования

UI Pack часто применяется в интерфейсах с высокой плотностью взаимодействий:

  • модальные окна с многоступенчатым появлением
  • динамические списки с анимацией перестроения
  • табы с переходами между состояниями
  • SPA-переходы между экранами

Каждый из этих сценариев использует комбинации встроенных эффектов UI Pack, объединённых в последовательности и цепочки.

Архитектурные особенности интеграции

UI Pack не изменяет DOM напрямую, а работает через слой абстракции Velocity. Это позволяет:

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

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