2011-12-22 5 views
6

Mi sto ottenendo -moz-transform: translate(-283.589px, 0px) da dom facendo element.style[vendor + 'Transform']. Ora voglio estrarre il valore -283.589px per usarlo nella mia applicazione ma non ottenere il modo esatto per recuperarlo. Se faccio console.log($('.slide').css("-moz-transform")) restituisce il valore della matrice come matrix(1, 0, 0, 1, -283.589px, 0px). C'è un modo adeguato in jquery per recuperare direttamente il valore -283.589px. Non voglio fare alcun calcolo matriciale.Recupera il valore css della trasformazione direttamente utilizzando jquery

+0

È don' t necessario calcolare nulla perché il valore è proprio lì ... –

+0

Il valore è qui ma come posso usarlo. Voglio fare qualcosa come $ ('id'). Animate (a sinistra: X); dove X = -283,589px. Questo è ciò che sto cercando. – user850234

+0

non puoi semplicemente accedere alla matrice come array? 'var x = matrix [5];' –

risposta

24

Ho buone notizie e cattive notizie.

Inizierò con le cattive notizie: dopo aver esaminato l'oggetto restituito da jQuery, l'oggetto matrix non è altro che una stringa e non è assolutamente possibile ottenere un altro oggetto tranne una stringa. Per quanto ci piacerebbe non essere d'accordo sul fatto che non dovrebbe essere una stringa: i valori CSS sono stringhe, quindi jQuery restituisce le stringhe.

Quindi, che ti piaccia o no, devi davvero analizzare la stringa per ottenere il valore. La buona notizia è: ho due soluzioni.

Ora, se sei MOLTO sicuro che il primo paio di valori sia SEMPRE lo stesso, potresti semplicemente usare la sottostringa. Ma, il prossimo problema: in Google Chrome, il valore -283.589px viene modificato in -283.5889892578125.

Onestamente, è necessario un parser di stringa più avanzato per ottenere il valore corretto. Accolgo espressioni regolari:

var matrix = $('.selector').css('-moz-transform'); 
var values = matrix.match(/-?[\d\.]+/g); 

Questo ottiene tutti i valori della stringa.

Selezionando l'indice destro, è possibile ottenere il valore:

var x = values[5]; 

Questo è la soluzione migliore che posso fornire e sono sicuro che è l'unica soluzione possibile.

+0

Questo non funziona con i negativi;) 'matrix (1, 0, 0, 1, -770, 0) === [1, 0, 0, 1, 700, 0] ' – yckart

+1

@yckart L'ho completamente dimenticato! Ho cambiato l'espressione per abbinare anche i numeri negativi, grazie! –

+0

Oppure potresti trovare la prima parentesi e usare split: 'var matrix = $ ('. Selector'). Css ('transform'), idx = matrix.indexOf ('('), values ​​= matrix.substring (idx +1, matrix.length-1) .split (';'); 'Scommetto che funziona meglio. –

0

utilizzando var matrix = $('.selector').css('-moz-transform');,

matrix.match(/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/); 

darebbe un oggetto con {0, 1, 2, indice, input}

[1] = x, [2] = y

3

Poiché ho costantemente bisogno di usare jQuery insieme a TweenMax e poiché TweenMax si occupava già di tutte le analisi dei vari tipi di stringhe di trasformazione e dei problemi di compatibilità, ho scritto un piccolo plugin jQuery here (più di un riepilogo di gsap) che potrebbe accedere direttamente a questo valore s come questo:

$('#ele').transform('rotationX') // returns 0 
$('#ele').transform('x')   // returns value of translate-x 

l'elenco delle proprietà che si potrebbe ottenere/set, insieme con le loro proprietà iniziali:

perspective: 0 
rotation: 0 
rotationX: 0 
rotationY: 0 
scaleX: 1 
scaleY: 1 
scaleZ: 1 
skewX: 0 
skewY: 0 
x: 0 
y: 0 
z: 0 
zOrigin: 0 
+1

Grazie per questo. in un progetto di rotaie e funziona benissimo! Molto più pulito rispetto alle altre risposte qui Er comodo per l'uso con gsap. – Starfs

0

Mentre jQuery non può farlo da solo, un metodo Regex sarebbe meglio.
Nel codice sottostante le parseComplexStyleProperty funzioni prende una stringa che è, per esempio, l'attributo style di un elemento e rompe in un oggetto di chiavi e valori:

function parseComplexStyleProperty(str){ 
 
    var regex = /(\w+)\((.+?)\)/g, 
 
     transform = {}, 
 
     match; 
 

 
    while(match = regex.exec(str)) 
 
     transform[match[1]] = match[2]; 
 
    
 
    return transform; 
 
} 
 

 
////////////////////////////////////////// 
 

 
var dummyString = $('something').attr('style'), 
 
    transformObj = parseComplexStyleProperty(dummyString); 
 

 

 
console.log(dummyString, transformObj)