Почему document.elementFromPoint возвращает ноль для элементов вне видимого документа - PullRequest
6 голосов
/ 10 марта 2011

Почему document.elementFromPoint(500,1000) здесь возвращает ноль, если этот пиксель находится вне видимого документа при загрузке документа?

Я заметил, document.elementFromPoint возвращает ноль для любой точки, которая изначально находится за пределами видимого документа, а также после того, как он будет прокручен.

Простой способ проверить это в Chrome ( ctrl-shift-i -> scripts -> 'watch expression' ) (убедитесь, что высота страницы сужена до менее чем 1000 пикселей)

РЕДАКТИРОВАТЬ: так что это имеет смысл, в соответствии с документы

  1. всегда возвращает ноль для точек вне видимой области
  2. x и y относятся к верхнему левому и правому краям видимого экрана

Я потерпел неудачу в обоих предположениях,

Ответы [ 2 ]

39 голосов
/ 30 мая 2013

Итак, вы как бы ответили на свой вопрос: document.elementFromPoint работает в координате области просмотра, а не в документе. Поэтому все, что вам нужно сделать, это добавить компенсацию прокрутки.

Для меня сработал следующий код:

document.elementFromPoint(X - window.pageXOffset, Y - window.pageYOffset);

Или, если вы слушаете событие, которое будет:

document.elementFromPoint(e.pageX - window.pageXOffset, e.pageY - window.pageYOffset);
2 голосов
/ 10 марта 2011

Имеет смысл, что он не возвращает элемента, когда вы указываете точку за пределами окна.Он возвращает элементы, которые видны в этой точке, а не элементы, которые были бы видны там, если бы окно имело другой размер.Учтите, что изменение размера окна может привести к перемещению элементов, поэтому вы не получите последовательного ответа, если оно вернет элементы, которые могут отображаться в этой точке.

Независимо от того, как вы прокручиваете содержимое вокно, точка за окном все еще за окном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...