2011-11-02 10 views
10

Dire un div è presente ad esso applicata:Ottieni valori convertiti3d di un div?

-webkit-transform: translate3d(0px, -200px, 0px) 

Come potrei recuperare quei valori con jQuery?

+1

Hai provato a usare ['jQuery.css'] (http://api.jquery.com/css)? – namuol

risposta

10

Il valore viene memorizzato come matrix o matrix3d, a seconda che il valore z sia stato impostato o meno. Assumendo nessun'altra trasformazione, per una matrice 2D, X e Y sono gli ultimi due valori. Per una matrice 3D, X, Y, Z, 1 sono le ultime quattro cifre.

Si potrebbe usare un'espressione regolare per ottenere i valori:

function getTransform(el) { 
    var results = $(el).css('-webkit-transform').match(/matrix(?:(3d)\(\d+(?:, \d+)*(?:, (\d+))(?:, (\d+))(?:, (\d+)), \d+\)|\(\d+(?:, \d+)*(?:, (\d+))(?:, (\d+))\))/) 

    if(!results) return [0, 0, 0]; 
    if(results[1] == '3d') return results.slice(2,5); 

    results.push(0); 
    return results.slice(5, 8); 
} 
+3

Puoi semplicemente ottenere 'css ('transform')' ora che jQuery normalizza i prefissi dei fornitori. – Soviut

+1

Come menzionato nella risposta di Trevor, questo NON FUNZIONA per valori negativi !! – Larzan

0

EDIT: Questo è sbagliato, ignoralo.

penso che se fai una cosa del genere ...

var styles = $('.myclass').css('-webkit-transform'); 

si sarebbe probabilmente ottenere la parte posteriore translate3d(0px, -200px, 0px).

Forse potresti quindi analizzare quella stringa? sembra un po 'un trucco.

+1

no, si otterrebbe una matrice in questo modo: 'matrice (-1, -0,00000000000000012246467991473532, 0,00000000000000012246467991473532, -1, 0, 0)' – ProblemsOfSumit

+1

ah giusto! uch! Ecco perché ho detto * pensa *, * probabilmente * e * forse * :) – simonlchilds

9

Se si cambia match() modello della risposta accettata a questo si aggiunge il supporto per i numeri negativi:

$(el).css('-webkit-transform').match(/matrix(?:(3d)\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))(?:, (-{0,1}\d+)), -{0,1}\d+\)|\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))\))/) 
+0

restituisce null nel mio caso –

1

Se aggiorna l'espressione regolare al seguente aggiunge i supporti per quei casi strani quando la tua trasformazione è mobile:

/matrix(?:(3d)\(-{0,1}\d+\.?\d*(?:, -{0,1}\d+\.?\d*)*(?:, (-{0,1}\d+\.?\d*))(?:, (-{0,1}\d+\.?\d*))(?:, (-{0,1}\d+\.?\d*)), -{0,1}\d+\.?\d*\)|\(-{0,1}\d+\.?\d*(?:, -{0,1}\d+\.?\d*)*(?:, (-{0,1}\d+\.?\d*))(?:, (-{0,1}\d+\.?\d*))\))/ 
Problemi correlati