2016-05-28 7 views
0

Meine .test Klasse sieht wie folgt aus:Wie die Unter Attribut von CSS3 Matrix auszuwählen Transformation mit jQuery

.test { 
    transform-style: preserve-3d; 
    width: 460px; 
    height: 738px; 
    transform: translate3d(0px, 0px, 480.89px) 
    matrix3d(-0.959423, 0.0701992, -0.273093, 0, 0, -0.968514, -0.248959, 0, 0.281971, 0.238857, -0.929215, 0, 0, 0, 0, 1) 
    translate3d(230px, 369px, 0px); 
} 

Da matrix3d dynamisch ist, ich bin für Änderungen von das 3. Arraymitglied zu hören versuchen, von matrix3d und führen Sie eine bedingte if-Anweisung darauf aus. Wie kann das gemacht werden?

+0

Sie meinen, Sie diesen Teil müssen - '0,281971, 0,238857, -0,929215, 0 'von dem Wert? – Harry

+0

Bitte zeigen Sie mir, wie man alles sammelt und wie man jedes einzelne sammelt, ich müsste eine IF-Funktion implementieren, die auf diese Zahlen hört, wenn sie größer oder kleiner sind als das, was ich entscheide, wie mache ich das. Gibt es eine andere Option als Split? Ich brauche die ganze Floating-Nummer, nicht 0, 1 und -1. – erezT

+0

Hoppla, ich habe die Bearbeitung Ihres Kommentars erst gesehen, nachdem Sie die Antwort gepostet haben. Was ist falsch mit Split? Es gibt die vollen Werte (und nicht nur 0 oder 1). Überprüfen Sie meine Antwort und lassen Sie mich wissen, wenn es nicht hilft. – Harry

Antwort

1

Sie können getComputedStyle verwenden, um den Wert der transform-Eigenschaft abzurufen und sie dann zu teilen (oder eine RegEx zu verwenden, je nachdem, was Sie bevorzugen), um die einzelnen Werte wie im folgenden Codefragment zu erhalten.

var el = document.querySelector('.test'), 
 
    op = document.querySelector('output'), 
 
    btn = document.querySelector('.change'), 
 
    oldparams, newparams; 
 

 
window.onload = function() { 
 

 
    /* get matrix on load */ 
 
    oldparams = getMatrix(); 
 
    op.innerHTML += 'Original Matrix Row 3: ' + oldparams[8] + ',' + oldparams[9] + ',' + oldparams[10] + ',' + oldparams[11]; /* since array is 0 based, 8 - 11 is the 3rd row. */ 
 

 
    /* on click of button, change matrix and get the changed value */ 
 
    btn.addEventListener('click', function() { 
 
    el.style.transform = 'translate3d(0px, 0px, 480.89px) matrix3d(-0.959423, 0.0701992, -0.273093, 0, 0, -0.968514, -0.248959, 0, 0.383571, 0.578857, -0.639215, 0, 0, 0, 0, 1) translate3d(230px, 369px, 0px)'; 
 
    newparams = getMatrix(); 
 
    op.innerHTML += '<br><br> New Matrix Row 3: ' + newparams[8] + ', ' + newparams[9] + ', ' + newparams[10] + ', ' + newparams[11]; /* since array is 0 based, 8 - 11 is the 3rd row. */ 
 
    }); 
 
} 
 

 
function getMatrix() { 
 
    var matrix = window.getComputedStyle(el).transform; 
 
    /*op.innerHTML = 'Matrix Transform is:' + matrix; */ 
 

 
    var params = matrix.split('(')[1].split(')')[0].split(','); 
 
    return params; 
 
}
.test { 
 
    transform-style: preserve-3d; 
 
    width: 460px; 
 
    height: 738px; 
 
    transform: translate3d(0px, 0px, 480.89px) matrix3d(-0.959423, 0.0701992, -0.273093, 0, 0, -0.968514, -0.248959, 0, 0.281971, 0.238857, -0.929215, 0, 0, 0, 0, 1) translate3d(230px, 369px, 0px); 
 
}
<h2>Output</h2> 
 
<output></output> 
 
<button class='change'>Change Matrix</button> 
 
<div class='test'>Some text</div>

+0

Ich habe es gerade getestet und das ist das Ergebnis: http://prntscr.com/b9dadn Ziemlich weit weg von dem, was benötigt wird, was ist mit diesem schwimmenden div 'sometext', nette Funktion, aber weit weg von dem, was ich brauche. – erezT

+0

@erezT Das 'sometext' ist das Element mit der Transformation. Das Array ist 0-basiert und sollte daher mit 8-11 als Index (siehe aktualisierte Antwort) anstelle des ursprünglichen 9-12 arbeiten. Wenn es Ihre Anforderungen immer noch nicht erfüllt, können Sie die genaue Ausgabe anzeigen, nach der Sie suchen? – Harry

+0

habe ich schon alle im Eröffnungsposten Kumpel angegeben. Um es noch einmal zu verdeutlichen, brauche ich die Klasse nicht umherfliegen zu müssen, ich brauche nur jede Anzahl von matrix3d ​​dynamisch gespeichert, da müsste ich laufen wenn sie später statementets werden. Auch hier ist die Ansicht dynamisch. Wenn sich die Ansicht bewegt, ändern sich die Zahlen. Ich möchte diese Zahlen als Variablen verwenden, die ich später als Referenz verwenden kann. – erezT