getBoundingClientRect()
restituisce le coordinate di un elemento sullo schermo dopo la trasformazione del. Come faccio a calcolare quelle coordinate prima che venga trasformato lo? cioè senza trasformazioni.Come calcolare getBoundingClientRect() senza considerare le trasformazioni?
Il modo più semplice che ho trovato era:
element.style.transform = 'none'; //temporarily reset the transform
var untransformedOffset = element.getBoundingClientRect().top; //get the value
element.style.transform = ''; //set it back
ma che provoca lento layout di santa ragione, particolarmente evidente se fatto su molti elementi. Demo dal vivo: http://jsbin.com/nibiqogosa/1/edit?js,console,output
C'è un modo migliore?
Questo codice javascript può essere applicato a:
<div id="element"></div>
<style> #element { transform: translateY(20px); }</style>
E il risultato sarà 0 (escluso il margine della pagina)
Il risultato di element.getBoundingClientRect().top
sarà 20 (escludendo il margine della pagina)
Edit: Risposte roundup
http://jsbin.com/kimaxojufe/1/edit?css,js,console,output
Leggere la matrice di trasformazione e eseguire alcuni calcoli con i valori della matrice e il limite di delimitazione corrente. – Teemu
Super hacky http://jsbin.com/sivojuluvo/1/edit?js,console,output –
Interessante, se lo metti come risposta lo inviterò. È _hacky_ ma non troppo se il risultato è sempre un 'matrix' o' matrix3d' in ogni browser. –