translateX, translateY и translateZ в Velocity.js управляют трансформациями элемента через CSS transform, обеспечивая высокопроизводительную анимацию с аппаратным ускорением. Эти параметры являются частью системы transform-переходов и позволяют смещать элементы по осям X, Y и Z без перерасчёта геометрии страницы (reflow), что делает анимации более плавными по сравнению с традиционными свойствами вроде top и left.
Velocity.js работает поверх CSS transform, объединяя несколько операций в одну строку transform. При использовании translateX, translateY и translateZ библиотека автоматически формирует корректное значение transform:
Пример базового применения:
Velocity(element, {
translateX: "100px",
translateY: "50px"
});
В результате создаётся единая трансформация:
transform: translateX(100px) translateY(50px);
Velocity.js поддерживает несколько форматов значений:
"100px", "2em",
"10%" (в зависимости от контекста)Относительное смещение позволяет анимировать элемент от текущей позиции:
Velocity(element, {
translateX: "+=50",
translateY: "-=20"
});
Такой подход особенно полезен в интерактивных интерфейсах, где важно учитывать текущее состояние элемента.
translateZ отвечает за перемещение элемента по оси глубины. Однако его поведение зависит от наличия 3D-контекста.
Velocity(element, {
translateZ: "100px"
});
Для корректного отображения требуется включённый 3D-контекст, который может быть активирован через дополнительные CSS-свойства:
perspectivetransform-style: preserve-3dVelocity.js не управляет перспективой автоматически, поэтому визуальный эффект глубины проявляется только при наличии соответствующего окружения.
Одновременное использование translateX, translateY и translateZ позволяет создавать сложные траектории движения:
Velocity(element, {
translateX: "200px",
translateY: "150px",
translateZ: "80px"
}, {
duration: 800
});
Velocity объединяет все трансформации в единый CSS transform, избегая конфликтов между свойствами.
Velocity.js не изменяет отдельные CSS свойства transform напрямую. Вместо этого он:
Это позволяет совмещать translateX/Y/Z с другими трансформациями:
Пример:
Velocity(element, {
translateX: "100px",
rotateZ: "45deg"
});
Velocity корректно объединяет обе операции в один transform.
translateX, translateY и translateZ относятся к GPU-ускоряемым операциям. Браузеры обрабатывают их через compositing layer, что снижает нагрузку на CPU.
Ключевые особенности производительности:
Особенно заметен эффект при анимации множества элементов одновременно.
Velocity.js поддерживает относительные выражения, что делает translateX/Y/Z удобными для интерфейсов с непредсказуемым состоянием:
Velocity(element, {
translateY: "+=30px"
});
Такие выражения применяются в:
Velocity объединяет все transform-операции в один слой. Это важно для предотвращения перезаписи значений:
Velocity(element, {
translateX: "100px"
});
Velocity(element, {
scale: 1.2
});
В результате итоговый transform сохраняет оба эффекта, а не заменяет один другим.
translateX, translateY и translateZ часто используются в цепочках анимаций Velocity:
Velocity(element, { translateX: "100px" }, { duration: 300 });
Velocity(element, { translateY: "100px" }, { duration: 300 });
Velocity(element, { translateZ: "50px" }, { duration: 300 });
Каждая операция добавляется в очередь и выполняется последовательно, если не указано обратное.
Использование translateZ без 3D-контекста приводит к отсутствию визуального эффекта. Также важно учитывать:
Velocity.js позволяет управлять характером движения через easing:
Velocity(element, {
translateX: "300px"
}, {
duration: 1000,
easing: "easeOutQuart"
});
Easing влияет на скорость изменения координат, но не изменяет сам принцип работы translateX/Y/Z.
translateX, translateY и translateZ часто используются для построения многослойных интерфейсов:
Комбинация всех трёх осей позволяет моделировать движение в пространстве без WebGL, используя только CSS transform через Velocity.js.