traduccion - ¿Cómo obtengo la posición de un elemento después de la traducción css3 en JavaScript?
traduccion del adn pdf (2)
Ok, agárrate fuerte porque esto no es bueno:
window.addEventListener(''load'', function(){
var node = document.getElementById("yourid");
var curTransform = new WebKitCSSMatrix(window.getComputedStyle(node).webkitTransform);
console.log(node.offsetLeft + curTransform.m41); //real offset left
console.log(node.offsetTop + curTransform.m42); //real offset top
});
Puedes jugar con él aquí:
Vi esto publicado en 2 formas diferentes en stackoverflow, pero las soluciones no funcionan para mí.
Esencialmente, tengo un artículo que traduciré. Cuando hago un obj.style.left u obj.offsetLeft, después de que el elemento se haya traducido, obtengo 0. ¿Hay alguna forma de obtener las coordenadas / posición de un elemento después de que se haya traducido con css3?
No puedo usar jQuery (porque no puedo y también porque quiero entender la solución, no solo usar la biblioteca sin entender lo que sucede debajo)
¿Algunas ideas?
¡Muchas gracias!
Puedes usar getBoundingClientRect()
:
Imagina el siguiente bloque html:
<div class="centralizer popup">
<div class="dragger"></div>
</div>
Y el estilo:
body {
background:#ccc;
}
.centralizer {
position:absolute;
top:150px;
left:170px;
width:352px;
height:180px;
overflow:auto;
-webkit-transform: translateY(-50%) translateX(-50%);
-moz-transform: translateY(-50%) translateX(-50%);
-ms-transform: translateY(-50%) translateX(-50%);
transform: translateY(-50%) translateX(-50%);
}
.popup {
background:white;
box-shadow:0 0 0 2px rgba(0, 0, 0, 0.1), 0 0 15px rgba(0, 0, 0, 0.3);
border-radius:3px;
}
.dragger {
background:#eee;
height:35px;
border-radius:3px 3px 0 0;
border-bottom:1px solid #ccc;
}
Ahora puedes usar el siguiente javascript para obtener la posición correcta:
var popup = document.querySelector(''.popup'');
var rect = popup.getBoundingClientRect();
console.log("popup.getBoundingClientRect(): /n" + "x: " + rect.left + "/ny: " + rect.top);
Puedes consultar el resultado en el jsfiddle :
Probé en FF, IE y Chrome, y funcionó en todas mis pruebas.