Если у меня есть два вложенных элементов, позволяет сказать:CSS Transform в World/Screen Space
<div id="outside">
<div id="inside">Foo</div>
</div>
и применяет вращение внешнего элемента, позволяет сказать, повернуты по часовой стрелке на 45 градусов:
<div id="outside" style="transform: rotateZ(-45deg);">
<div id="inside">Foo</div>
</div>
, и теперь я хочу немного перевести внутренний div по экрану.
<div id="outside" style="transform: rotateZ(-45deg);">
<div id="inside" style="transform: translateY(100px);">Foo</div>
</div>
http://jsfiddle.net/du2w91vw/8/
О, нет! он наследует, что его родители трансформируются (что я действительно хочу) и переместили его под углом 45 градусов. Как тогда я перемещаю его вертикально относительно экрана (т. Е. Трансляции в мире)?
Теперь я мог хранить все его родительские преобразования и вычислять их сам, и выработать правильный перевод, но тогда я мог бы просто иметь полностью плоскую иерархию dom и делать все это сам. Я хочу использовать неявно унаследованные преобразования!
tl; dr: Есть ли способ получить преобразование мира элемента, не просматривая все дерево DOM для преобразований или сохраняя все родительские преобразования в памяти?
Примечание: Мое требование состоит в том, что я не могу перемещать внешний div.
Редактировать: Я только что узнал о getComputedStyle, который возвращает мне матрицу. Немного беспорядочного решения (всегда ли браузеры возвращают тот же формат?), Но я мог бы понять это.
var t = getComputedStyle(element, null).getPropertyValue('transform')
// e.g. t = "matrix(1, 0, 0, 1, -333, -26)"
Редактировать edit: getComputedStyle является уродливым. Фу, почему нет хорошего решения для этого. How to read individual transform values in JavaScript?
Что вы подразумеваете под словом "переместить его относительно экрана?" Что вы пытаетесь выполнить с преобразованием 200px? – leigero
Просто перемещайте элемент по экрану вертикально, а не под углом 45 градусов. –
Я получаю то, что вы хотите. Рассматривали ли вы применение перевода на '.outside' вместо' .inside'? Или даже изменить происхождение преобразования на -200px. –