Cómo obtener la posición del elemento transformado con css rotate
Tengo un problema con obtener la posición de un div después de que se le aplique el filtro rotate
. Tengo la posición de un extremo, su altura y el ángulo por el que se gira, pero después de comprobar lo que este filtro realmente hace en MDN ("[cos(angle) sin(angle) -sin(angle) cos(angle) 0 0]") Todavía no sé cómo descifrarlo.
Ejemplo:
El div que me interesa es la línea discontinua. Su estilo en ese momento fue :
left: 80px; top: 12px; height: 69.5122px; width: 2px; -moz-transform: rotate(-1.21366rad);
(top
/left
describa la posición de su comienzo.) Estoy tratando de conseguir el top
/left
posición de su extremo.
2 answers
Por su pregunta actual y su confirmación solicitada de:
var x = termin.top + Math.cos(angle) * div.height;
var y = div.left + Math.sin(angle) * div.height;
La solución se puede encontrar en este otro ASÍ que Responde para una pregunta diferente , mejorada aquí:
// 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 un interactivo jsFiddle que proporciona actualizaciones en tiempo real para la función getPositionData();
.
Podrás ver los valores top
y left
al final del proceso CSS3 Rotation que controles.
Referencia: jsFiddle
Actualización de estado: El jsFiddle anterior funciona muy bien para 0-90deg y puede aprobarse para todos los ángulos y diferentes unidades, como rad, grad y turn.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:45:39
Intenta usar element.getBoundingClientRect()
Según MDN:
A partir de Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0), el efecto de las transformaciones CSS es considerado al calcular el rectángulo delimitador del elemento.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-03 21:13:50