Как эффективно переключать изображения в SVG?

Доброго вам времени суток, коллеги!
Я только начинаю работать с SVG, так что может и элементарщину спрашиваю...

У меня есть такая задача, пока отвлеченно от SVG:
Есть несколько "графических компонентов", каждый из которых представляет собой набор именованных состояний. Каждое состояние представляет собой набор именованных векторных примитивов. Для всего компонента в целом, для состояния и для отдельного примитива задается стиль его отображения (в том числе анимация). На области отображения размещаются объекты, созданные на основе этих компонентов. Для каждого объекта можно доопределить/переопределить стиль его отображения и выбрать отображаемое состояние. На этапе выполнения необходимо динамически иметь возможность менять состояние.

С первого взгляда, все это хорошо ложится в SVG. Компоненты и объекты очень похожи на связку тегов symbol и use. Стили отображения вполне себе хорошо реализуются через CSS.
Две вещи мне непонятны:
1. Как в данном случае быть с переключением состояний? По хорошему было бы: "задал класс состояния->магия->сменилось отображаемое состояние". Есть ли такая магия в SVG или придется затачивать JS-топор и вручную, редактируя svg-DOM, менять одно состояние на другое?
2. После ряда экспериментов понял, что в use не имею доступа к внутренней структуре, задаваемой в symbol (а без этого не переопределить стили для отдельных примитивов объекта). Это действительно так или я что-то неправильно делаю? Если это так, то получается symbol use мне не подходят, и опять таки придется вручную формировать итоговый SVG документ, вставляя "состояние" как g?

UPD: Пока складывается впечатление, что CSS-файл со всеми стилями будет статическим, а SVG будет (пере)генерироваться на лету, при изменении состояний объектов.
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 2
streetflush
@streetflush
Не совсем понял фразы типа "что в не имею доступа к внутренней структуре, задаваемой в"

SVG состоит из объектов, для каждого из которых есть свой PATH. Для него и задаем свойства...

Для удобной работы с DOM SVG:
keith-wood.name/svg.html

Хотя я использую простые анимации через window.requestAnimationFrame();
Ответ написан
@inmotusdesign
Фронтенд-разработчик
Посмотрите данное решение (есть код описания решения и пошаговое использование): https://bundlespace.com/intro/lessons/lesson-group... Изменение состояние при наведении (примитив для примера).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы