2011-11-06 12 views
13

Ho un sito molto complicato costruito su CSS3 che ha elementi HTML trasformati, ruotati, capovolti, floppati e solo generalmente distorti.Come ottenere la posizione dello schermo di elementi trasformati CSS3-3d?

Sto cercando di capire la posizione sullo schermo di uno di questi elementi e non vedo alcun modo per farlo. Mi stavo chiedendo se qualcuno ha qualche idea geniale.

In alternativa, se qualcuno può spiegare la matematica dietro -webkit-perspective, posso capire la posizione che è l'unica cosa che non sono sicuro di come modello.

risposta

13

Hai provato a utilizzare getBoundingClientRect()?

L'ho usato con successo in passato per calcolare le dimensioni degli elementi che sono stati trasformati con la proprietà transform.

1

Il problema è che le trasformazioni CSS3 in realtà non cambiano in alcun modo la posizione degli elementi. Ovviamente i browser "sanno" che sono riposizionati, perché li rende, ma questa informazione non viene restituita al DOM/API.

L'unica cosa che posso pensare è calcolare le posizioni in base alle trasformazioni da soli, poiché queste sono "semplici" matrix transformations.

Sfortunatamente la lezione di Algebra è stata da troppo tempo, che non posso dirti più come farlo - solo che è possibile.

+3

Sì, so qual è il problema :) E sarei felice di calcolarlo da solo, ma come ho detto non so quale sia la matematica dietro "-webkit-perspective". Funziona in qualche modo come un controllo della lunghezza focale, ma wtf ha '-webkit-perspective: 500' significa veramente?!? –

+0

guarda il CSS3DRenderer di three.js. Da quello che ricordo, prendono il campo visivo della videocamera (fov) e lo moltiplicano in base alla larghezza o all'altezza per ottenere la prospettiva. Quindi è in relazione a quelli. – Funkodebat

0

L'utilizzo di getBoundingClientRect è una buona idea, ma ti fornirà solo le coordinate del rettangolo che contiene la tua forma, non le coordinate esatte dei 4 angoli in alto, in basso, in basso a sinistra, in alto a destra.

Si sarebbe in grado di farlo solo prendendo ciascuna di quelle coordinate non trasformate e applicando la trasformazione tramite javascript.

+2

si prega di postare questo come un commento sulla risposta accettata invece di aggiungere una nuova risposta –

Problemi correlati