Получить положение элемента DOM относительно верхней части страницы с помощью Javascript (кросс-браузер)

1

У меня возникла проблема с попыткой определить положение элемента DOM относительно верхней части страницы (независимо от того, находится ли она в или из окна просмотра).

Теперь, в Firefox, это очень просто, просто выполните:

jQuery(element).offset().top

Однако в Chrome это выражение возвращает положение элемента относительно окна просмотра, которое изменяется при прокрутке вверх и вниз по странице. В этом случае я могу вместо этого вычислить значение, которое я хочу сделать:

jQuery(element).offset().top + document.body.scrollTop

Трудность, конечно, в том, что разные версии Chrome могут иметь дело с этим по-другому, не говоря уже о других браузерах, которые я даже не могу проверить! Есть ли кросс-браузерное простое решение, чтобы найти это значение? Казалось бы, достаточно просто, чтобы хотеть сделать.

редактировать

Как кто-то сказал, "это должно быть то же самое, что точка jQuery". Я тестировал его на других сайтах, и это так. Почему-то мой сайт отбрасывает его по какой-то причине. Какие-нибудь подсказки о том, что может быть причиной этого?

  • 2
    Нет, Chrome и Firefox ведут себя одинаково с .offset() . (В этом вся суть jQuery.) Однако Chrome (WebKit в целом) не любит думать о <body> как о части контекста прокрутки.
  • 1
    Если вы поместите <div> в качестве единственного дочернего элемента для <body> с height: 100% и убедитесь, что вы очистили любые дополнения <body> т. Д., Вы можете использовать этот <div> в качестве ссылочного элемента прокрутки.
Показать ещё 3 комментария
Теги:
position
dom

1 ответ

1
Лучший ответ

Найди его! Как оказалось, для этого было странное правило CSS:

html, body {
    overflow-y: scroll;
}

Это создало окно прокрутки внутри окна прокрутки (но каким-то образом скрытое от представления), что означает, что, хотя я прокручивался через внутреннее окно "тело", мой видовой экран фактически не двигался. Я понял это, заметив, что window.pageYOffset всегда возвращался 0.

  • 1
    Рад, что вы поняли это! Webkit странно относится к прокрутке и <body> способами, которые я не до конца понимаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню