Правильная структура разметки inline-SVG для анимации?
Допустим, я хочу анимировать вектор, который выглядит следующим образом, с помощью Javascript.
Нажмите здесь.. (Извините, моя репутация Точка ниже требования к посту изображения)
затем я делю его на 4 части (голова, тело, 2 ноги) и делаю анимацию для каждой из них..
В чем мой вопрос, какова правильная структура разметки для вектора выше??
из того, что я знаю.. есть 3 возможности:
группа
<svg> <g id='head'>...</g> <g id='body'>...</g> <g id='leg_1'>...</g> <g id='leg_2'>...</g> </svg>
Вложенный SVG
<svg> <svg id='head'>...</svg> <svg id='body'>...</svg> <svg id='leg_1'>...</svg> <svg id='leg_2'>...</svg> </svg>
SVG для каждой части
<svg id='head'></svg> <svg id='body'></svg> <svg id='leg_1'></svg> <svg id='leg_2'></svg>
Я знаю, что есть много библиотек, которые могут помочь нам в создании SVG-анимации, но я не об этом спрашиваю, я хочу знать, как должна выглядеть структура разметки? Так что нам будет проще манипулировать ими
Есть ли кто-нибудь, кто может дать мне немного просветления об этом?
1 ответ
Какую из этих структур вы бы использовали, на самом деле не определяется тем, что вы хотите их оживить. Вопрос, который вам нужно задать, заключается в том, какой самый выразительный способ сформулировать свойства позиционирования, размеров и преобразования для каждой из частей и для связи друг с другом?
Если вы используете группы в родительском svg, координаты первоначально выражаются относительно области просмотра родительского svg.
<svg>
элемент.- с SVG
transform
атрибут или CSStransform
собственность на<g>
элемент, вы можете перемещать части внутри родителя. (Под "движением" я подразумеваю любые афинные преобразования, включая вращение, масштабирование, переворачивание и наклон) - Координаты, в которых выражены части, будут интерпретироваться как "нейтральная" позиция в родительском элементе.
- с SVG
Если вы вкладываете svgs, вы создаете новые окна просмотра для каждой части.
- Для каждой части вы определяете прямоугольник, внутри которого он будет отображаться с атрибутами
x
,y
,width
а такжеheight
,preserveAspectRatio
решает позиционированиеviewBox
в. SVG или CSStransform
может быть использован для перемещения этих прямоугольников. - Система координат для выражения дочернего контента может быть выбрана с помощью
viewBox
приписывать. Координаты не зависят от родителей. Если оставить viewBox вне, результат будет эквивалентен установкеtranslate
преобразование на<g>
элемент, используя соответствующийx
а такжеy
значения атрибута.
- Для каждой части вы определяете прямоугольник, внутри которого он будет отображаться с атрибутами
Если вы используете отдельные svgs, каждый из них размещается в родительском HTML в соответствии с правилами CSS.
- Помните, что свойства позиционирования, выраженные в процентах, имеют разное значение в HTML и SVG. Если вы пропустите
viewBox
или свойства ширины / высоты на<svg>
элемент, существует процесс согласования для определения его размера, и в соответствии с правилами HTML CSS размеры родительских элементов могут изменяться. - Система координат дочернего содержимого определяется соответствующими
viewBox
атрибутов.
- Помните, что свойства позиционирования, выраженные в процентах, имеют разное значение в HTML и SVG. Если вы пропустите
Более конкретный вопрос в вашем случае заключается в том, хотите ли вы использовать анимацию CSS или SMIL. Хотя SMIL не реализован в браузерах Microsoft, он имеет более богатый синтаксис для синхронизации и размещения нескольких анимаций в одном свойстве / атрибуте. Он также имеет возможность реагировать на события, и вы можете анимировать атрибуты XML. (Не все из них, но все положительные атрибуты, упомянутые здесь.) CSS имеет возможность определять transform-origin
для каждого преобразования, которое в SVG реализовано только для rotate
трансформирует.
Поэтому, если вы хотите анимировать расположение частей в родительском элементе, выбор CSS-анимации может определить структуру, чтобы избежать использования атрибутов XML для этого позиционирования.