Существующие ответы устарели. Нативный метод getBoundingClientRect()
существует уже довольно давно и делает именно то, что задает вопрос. Кроме того, он поддерживается во всех браузерах (включая IE 5, кажется!)
От MDN page:
Возвращаемое значение является объектом TextRectangle, который содержит только для чтения слева, сверху, справа и снизу свойства описания рамка в пикселях с левым верхним относительно левого верхнего угла окна просмотра.
Вы можете использовать его так:
var viewportOffset = el.getBoundingClientRect();
// these are relative to the viewport, i.e. the window
var top = viewportOffset.top;
var left = viewportOffset.left;
Я думаю, что этот вопрос похож на http://stackoverflow.com/questions/211703/is-it- возможно-получить-позицию-of-div-in-browser-viewport-not-withi, которая имеет действительно хорошее решение. –
@JakobRunge, это было «приятно» в 2013 году? –
Рассмотрите возможность принятия решения. –