ViewBox — это атрибут SVG, определяющий видимую область графики и сопоставление координатной системы SVG с пространством на экране. Его правильное использование критично при анимации с помощью GSAP, так как преобразования и позиционирование элементов зависят от этих координат.
Формат записи:
Пример:
В данном случае координаты (0,0) соответствуют верхнему
левому углу, а (200,100) — нижнему правому.
GSAP оперирует пикселями экрана, но при работе с SVG ключевое значение имеют координаты, определённые через ViewBox. Если размеры SVG отличаются от размеров элемента на странице, GSAP автоматически масштабирует анимацию под визуальные размеры, но внутренняя система координат остаётся неизменной.
Например, анимация движения объекта по оси X:
gsap.to("#rect", { x: 100, duration: 2 });
Если SVG имеет viewBox="0 0 200 100" и ширину на
странице 400px, фактическое движение на экране составит 200px. Это важно
учитывать при синхронизации анимаций с другими элементами страницы.
SVG использует несколько уровней координатных систем:
x, y,
width, height и трансформациями
(transform).viewBox.GSAP работает с локальной системой трансформаций элемента,
автоматически учитывая масштаб и смещение, заданное
viewBox.
GSAP позволяет изменять свойства:
x, y — смещение по осям;scale, scaleX, scaleY —
масштабирование;rotation, rotationX,
rotationY — поворот;transformOrigin — точка опоры для трансформаций.Особенности работы с transformOrigin:
По умолчанию transformOrigin привязан к координатной
системе элемента. Для корректного центрирования часто используют:
gsap.to("#circle", { scale: 2, transformOrigin: "50% 50%" });
Здесь координаты 50% от ширины и высоты элемента. Важно понимать, что
при наличии viewBox эти проценты вычисляются относительно
локальной системы SVG, а не физических пикселей на странице.
Анимации GSAP могут быть чувствительны к соотношению сторон SVG и его контейнера. Для сохранения пропорций:
При этом GSAP корректно интерпретирует координаты в
viewBox, сохраняя визуальную консистентность анимации.
gsap.timeline()
.to("#rect1", { x: 50, duration: 1 })
.to("#rect2", { x: 150, duration: 1 }, "<"); // "<" синхронизирует начало
При этом все элементы используют координаты, заданные
viewBox, и независимо от реального размера SVG на странице
GSAP адаптирует движение.
viewBox и изменяют начальную точку системы координат.) —
позволяет применять трансформации к группе с сохранением внутренней
координатной системы. GSAP корректно обрабатывает трансформации таких
групп.