Как найти абсолютную позицию элемента с помощью jQuery?


399

Есть ли способ найти абсолютную позицию элемента, то есть относительно начала окна, используя jQuery?

Ответы:


652

.offset() вернет позицию смещения элемента в виде простого объекта, например:

var position = $(element).offset(); // position = { left: 42, top: 567 }

Вы можете использовать это возвращаемое значение, чтобы расположить другие элементы в том же месте:

$(anotherElement).css(position)

90
Я всегда забываю это и снова нахожу ваш пост, когда я гуглю: p
Aren

16
Это не всегда возвращает абсолютную позицию из-за различий в границах и т. Д.
Том

8
Я использую хром и offset()не возвращает правильную верхнюю координату. Вместо этого он возвращает примерно на 300 пикселей больше, чем верхняя координата элемента в документе. Почему??
SoLoGHoST

1
Chrome, FF и IE дают разные результаты :(
Ризван Мумтаз

3
@ Я всегда забываю это и нахожу твой комментарий забавным каждый раз :)
Alex

198

Обратите внимание, что $(element).offset()говорит вам положение элемента относительно документа . Это прекрасно работает в большинстве случаев, но в случае position:fixedвы можете получить неожиданные результаты.

Если документ больше , чем видовая и вы прокручивать по вертикали по направлению к нижней части документа, то вашему position:fixedэлемент offset()значение будет больше ожидаемым значения на сумму , которую вы прокручиваетесь.

Если вы ищете значение относительно окна просмотра (окна), а не документа с фиксированным элементом position: вы можете вычесть значение документа из scrollTop()значения фиксированного элемента offset().top. Пример:$("#el").offset().top - $(document).scrollTop()

Если position:fixedродительский элемент смещения элемента является документом , parseInt($.css('top'))вместо этого вы хотите прочитать .


8
Я искал именно это! Для новичка, как я: ценность, которую нужно вычесть,$(document).scrollTop()
доктор Джанлуиджи Зейн Занеттини

3
Потрясающие! Это должен быть главный ответ!
Шиваншу Гоял
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.