from javascript jquery html css css3

javascript - call js from html



ancho/alto despuĆ©s de la transformaciĆ³n (5)

¿Cómo recupero las propiedades de ancho y alto después de haber aplicado la transform: rotate(45deg); ?

Al igual que, 11x11 cuadrado después de la rotación se convierte en 17x17 (resultado de Chrome), pero javascript todavía devuelve el ancho / alto original - 10x10.

¿Cómo consigo este 17x17?


En caso de que esté buscando una función para calcular estos valores mediante programación ...

// return an object with full width/height (including borders), top/bottom coordinates var getPositionData = function(el){ return $.extend({ width : el.outerWidth(false), height : el.outerHeight(false) }, el.offset()); }; // get rotated dimensions var transformedDimensions = function(el, angle){ var dimensions = getPositionData(el); return { width : dimensions.width + Math.ceil(dimensions.width * Math.cos(angle)), height : dimensions.height + Math.ceil(dimensions.height * Math.cos(angle)) }; }

Aquí hay algo que pongo. Probablemente no sea lo mejor, pero hace el trabajo por mí.


En lugar de calcularlo usted mismo, puede obtener esto a través de getBoundingClientRect() .

Esto devolverá un objeto con la height y el width correctos, teniendo en cuenta la matriz de transformación.

jsFiddle .


Estoy escribiendo esta respuesta ya que has etiquetado a JQuery.

Jquery toma en consideración los factores de transformación al calcular las dimensiones.

Así que, si usas

$(''mySelector'').width()

Te dará el ancho real. Lo mismo ocurre con la height() , la left() y la top()


Hice una función para esto, domvertices.js

Calcula las coordenadas 3d de 4 vértices de cualquier elemento DOM profundo, transform , position , realmente cualquier elemento: vea la DEMO .

a b +--------------+ | | | el | | | +--------------+ d c var v = domvertices(el); console.log(v); { a: {x: , y: , z: }, b: {x: , y: , z: }, c: {x: , y: , z: }, d: {x: , y: , z: } }

Con esos vértices, puedes calcular cualquier cosa entre: ancho, alto ... Por ejemplo, en tu caso:

// norm(a,b) var width = Math.sqrt(Math.pow(v.b.x - v.a.x, 2) + Math.pow(v.b.y - v.a.y, 2));

Vea el README para más información.

-

Se publica como un módulo commonJS, así que instálelo con:

npm install domvertices

Aclamaciones.


Incluso si giras algo, las dimensiones no cambian, por lo que necesitas una envoltura. Intente envolver su div con otro elemento div y cuente las dimensiones de las envolturas:

<style type="text/css"> #wrap { border:1px solid green; float:left; } #box { -moz-transform:rotate(120deg); border:1px solid red; width:11px; height:11px; } </style> <script type="text/javascript"> $(document).ready(function() { alert($(''#box'').width()); alert($(''#wrap'').width()); }); </script> </head> <body> <div id="wrap"> <div id="box"></div> </div> </body>

Rediteado: la solución de la envoltura no funciona correctamente, ya que la envoltura no se ajusta automáticamente al contenido del div interior. Siga la solución matemática:

var rotationAngle; var x = $(''#box'').width()*Math.cos(rotationAngle) + $(''#box'').height()*Math.sin(rotationAngle);