Не могли бы вы объяснить, почему вам нужно нажать и выдвинуть состояние трансформации?
В svg вам не нужно этого делать, браузеры делают это за вас. Если вы хотите, чтобы конкретное преобразование применялось к элементу, просто добавьте к нему атрибут преобразования . Вы можете применить преобразование ко многим элементам, используя <g>
элементы (в Raphaël есть Paper.set , который можно использовать как элемент <g>
, и у вас есть Element.transform метод для установки преобразований).
Обновление:
context.save()
- в терминах svg это будет взять текущую матрицу преобразования (CTM) элемента в данный момент времени и сохранить его где-нибудь, в Raphaël, я думаю, это может быть Element.transform () (я не уверен на 100%, включает ли он весь стек преобразований или нет, в любом случае, в чистом svg CTM можно получить с помощью метода getCTM () , который доступен для всех элементов). Один из способов сделать это - вставить элемент <g>
с нужным преобразованием.
context.restore()
- в svg это будет эквивалентно удалению преобразования из списка преобразований, но обратите внимание, что в svg братья и сестры не «наследуют» преобразование (это не похоже на html5 canvas или OpenGL, где установлена текущая матрица просто применяется ко всему, что вы рисуете после установки преобразования). Если вы хотите, чтобы преобразование применялось ко многим элементам, вы создаете <g>
, который имеет преобразование, которое должно применяться ко всем дочерним элементам этого элемента, и для восстановления вы просто вставляете элементы в родительский элемент <g>
. Raphaël не имеет встроенной поддержки элемента <g>
(если не считать Element.set, который является аналогичной концепцией), предположение, почему Raphaël делает это, состоит в том, что он не позволяет людям пытаться делать такие вещи, как это потому, что становится очень легко раздувать DOM, не осознавая этого (помните, что SVG - это сохраненный режим графический формат, в отличие от canvas и OpenGL).