2011-11-06 5 views
13

Tengo un sitio muy complicado basado en CSS3 que tiene elementos html transformados en 3D, rotados, volteados, flopeados y en general distorsionados.¿Cómo obtener la posición de la pantalla de los elementos transformados CSS3-3d?

Estoy tratando de averiguar la ubicación en pantalla de uno de estos elementos y no veo ninguna manera de hacerlo. Me preguntaba si alguien tiene ideas ingeniosas.

Alternativamente, si alguien puede explicar las matemáticas detrás de -webkit-perspective, puedo averiguar la posición ya que es lo único que no estoy seguro de cómo modelar.

Respuesta

13

¿Ha intentado utilizar getBoundingClientRect()?

Lo he usado con éxito en el pasado para calcular las dimensiones de los elementos que se han transformado con la propiedad transform.

1

El problema es que las transformaciones CSS3 en realidad no cambian la posición de los elementos de todos modos. Por supuesto, los navegadores "saben" que están reubicados, porque los renderizan, pero esta información no se proporciona de vuelta al DOM/API.

Lo único que se me ocurre es calcular las posiciones basadas en las transformaciones usted mismo, ya que estas son "simples" matrix transformations.

Desafortunadamente, la clase Algebra ha sido hace mucho tiempo, que no puedo contarte más cómo hacerlo, solo que es posible.

+3

sí, sé cuál es el problema :) Y estaría feliz de calcularlo yo mismo, pero como dije, no sé cuál es la matemática detrás de '-webkit-perspective' en realidad. Actúa algo así como un control de distancia focal, pero ¿qué significa '-webkit-perspective: 500' en realidad?!? –

+0

mira el CSS3DRenderer de three.js. Por lo que recuerdo, toman el campo de visión (fov) de la cámara y lo multiplican por el ancho o la altura para obtener la perspectiva. Entonces está en relación a esos. – Funkodebat

0

El uso de getBoundingClientRect es una buena idea, pero solo le dará las coordenadas del rectángulo que contiene su forma, no las coordenadas exactas de las esquinas de 4 topleft, bottomright, bottomleft, topright.

Solo podrá hacer esto tomando cada una de esas coordenadas no transformadas y aplicando la transformación a través de javascript.

+2

publique esto como un comentario sobre la respuesta aceptada en lugar de agregar una nueva respuesta –

Cuestiones relacionadas