Vecchia ma interessante domanda e nessuna risposta precedente ha tentato di rispondere.
Sfortunatamente non esiste una soluzione a due linee per il caso generale e non sappiamo quale varietà di passaggi di trasformazione (ruotare, tradurre ecc.) Debba essere decodificata; meno è facile.
Negli ultimi browser basati su WebKit, si può semplicemente interrogare la proprietà precedentemente assegnato:
var element = document.querySelector('div.slipping');
element.style.webkitTransform
-> "translate(-464px, 0px)"
Continuiamo con il presupposto che lo stile calcolata deve essere utilizzato. L'esigenza sorge, ad esempio, se l'elemento si trova nel mezzo di una transizione CSS o di un'animazione CSS, vale a dire che la trasformazione corrente non è quella che è stata impostata direttamente.
La stringa del descrittore di matrice restituita da getComputedStyle può infatti essere analizzata tramite un'espressione regolare, ma non tutte le versioni precedenti sono affidabili e sono troppo opache.Un modo semplice per abbattere la stringa, se non è in un ciclo molto stretto da giustificare una regex single-pass, è questa:
var matrixString = window.getComputedStyle(element).webkitTransform;
var matrix = matrixString
.split('(')[1]
.split(')')[0]
.split(',')
.map(parseFloat);
Ma un altro modo è quello di usare semplicemente questo, che non è stato detto prima:
var cssMatrix = new WebKitCSSMatrix(matrixString);
il vantaggio di quest'ultimo approccio è che si ottiene indietro una matrice 4x4 pure, che è la rappresentazione standard per affine transformations, e lo svantaggio è che è naturalmente WebKit specifico. Se continui a lavorare con la tupla di sei valori come nella domanda, è definito in this part of the CSS standard.
Quindi la trasformazione, ad es. la rotazione deve essere decodificata. Ci possono essere molte semplici trasformazioni supportate direttamente dai CSS, ad es. tradurre, ridimensionare, ruotare, inclinare e prospettiva. Se viene applicato solo uno di questi, è sufficiente ripristinare la procedura di computing the transform matrix.
Un'alternativa è trovare o tradurre il codice che fa questo per te in JS, ad es. the same document o Section 7.1 of the CSS standard contiene tali algoritmi annotati. Il vantaggio è che l'approccio unmatrix è in grado, con alcune limitazioni, di restituire le trasformazioni "atomiche" anche se viene applicato più di uno di questi (traslazione, rotazione, ecc.). Dal momento che non è possibile garantire il successo del reverse engineering dei passaggi di trasformazione per il caso generale, è utile pensare a quali tipi di trasformazioni possono essere applicati e se sono stati evitati casi degenerati o altri casi problematici. Cioè hai bisogno di costruire la soluzione come meglio credi per il tuo problema.
In particolare, le versioni di matrice di tutte le trasformazioni CSS 2D sono documented here as well, al di sotto del significato dei sei valori nel vettore di trasformazione 2D CSS.
Un'altra avvertenza è che ci sono altre cose che influenzano il risultato visivo in termini di operazioni geometriche, ad esempio, transform-origin.
-webkit-trasformazione non è un attributo, quindi non è possibile accedervi tramite l'attributo, si dovrebbe accedere stile oggetto associato all'elemento. – shabunc