Las respuestas existentes ahora están desactualizadas. El método nativo getBoundingClientRect()
ha existido desde hace bastante tiempo y hace exactamente lo que la pregunta requiere. Además de que es compatible con todos los navegadores (como Internet Explorer 5, que parece!)
De MDN page:
El valor devuelto es un objeto TextRectangle, que contiene sólo lectura a la izquierda, arriba, derecha y propiedades inferiores describiendo el cuadro de borde, en píxeles, con la esquina superior izquierda relativa a la esquina superior izquierda de la ventana gráfica.
que lo utilice de esta manera:
var viewportOffset = el.getBoundingClientRect();
// these are relative to the viewport, i.e. the window
var top = viewportOffset.top;
var left = viewportOffset.left;
Creo que esta pregunta es similar a http://stackoverflow.com/questions/211703/is-it- possible-to-get-the-position-of-div-within-the-browser-viewport-not-withi, que tiene una solución realmente agradable. –
@JakobRunge, ¿eso fue "bueno" en 2013? –
Considera aceptar una solución. –