J'ai besoin d'obtenir la transformation matricielle d'une transformation CSS régulière comme celle-ci: rotateX(10deg) rotateZ(10deg)
.
Je sais qu'il existe une solution d'hébergement pour WebKit (WebKitCSSMatrix), mais il n'y a rien de tel pour Firefox ou IE …
Donc, j'ai essayé d'obtenir la matrice en configurant la transformation vers un invisible (pas dans le DOM) et en l'obtenant avec GetComputedStyle, mais cette méthode ne renvoie rien si l'élément est caché ou détaché du document.
Existe-t-il un bon tutoriel pour convertir les valeurs en Matrix?
Ensuite, comment convertir une matrice 2D en 3D? De 6 à 16 valeurs …
Vous pouvez calculer la matrice vous-même. Cette page explique comment décrire les rotations en tant que matrice 2D : http://help.adobe.com/fr_US/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html
Pour une rotation, ce serait:
On peut accéder aux valeurs de la matrice via ces propriétés. La dernière ligne n'a pas besoin d'être modifiée pour 2d. Pour initialiser une matrice dans l'utilisation de css: matrix(a,b,c,d,e,f)
Pour les matrices 3D, vous pouvez trouver une bonne introduction ici: http://www.eleqtriq.com/2010/05/understanding-css-3d-transforms/
Que de lire comment configurer manuellement une matrice: http://www.eleqtriq.com/2010/05/css-3d-matrix-transformations/
Dans les deux cas, vous devrez multiplier plusieurs matrices si vous souhaitez appliquer plus d'une transformation. Des informations sur la façon de le faire peuvent être trouvées ici: http://www.useragentman.com/blog/2011/01/07/css3-matrix-transform-for-the-mathematically-contested/
REMARQUE:
getComputedStyle
méthodegetComputedStyle
ne fonctionne que pour les éléments qui sont ajoutés à votre document
Commençons par une fonction qui fait un élément caché et l'ajoute dans votre document:
var make_test_el = function () { var el = document.createElement("div"); // some browsers doesn't add transform styles if display is inline el.style.display = "block"; // to be sure your element won't be shown el.style.width = "0px"; el.style.height = "0px"; el.style.margin = "0px"; el.style.padding = "0px"; el.style.overflow = "hidden"; document.body.appendChild(el); return el; }
Alors utilisez-le simplement par le code suivant:
var value = 'rotateX(10deg) rotateZ(10deg)'; // your readable value for transformation var elem = make_test_el(); elem.style.transform = value; // take your result and alert it var result = window.getComputedStyle(elem,null).transform; alert(result); //then remove appended element elem.parentNode.removeChild(elem);
Démo: http://jsfiddle.net/hbh7ypc9/1/
Le résultat que vous verrez peut-être matrix3d(...)
ou matrix(...)
Cela dépend du RenderEngine du navigateur et de la valeur donnée
par exemple:
IE10 vous donnera toujours matrix3d(...)
Mais pour les besoins de chrome et d' opéra sur une valeur donnée
Mais je n'ai aucune idée de la conversion d'une matrice 2D en 3D
C'est une question que j'ai aussi
En fait, les valeurs de la matrice sont vraiment difficiles à comprendre
bonne chance…