Javascript 为什么document.elementFromPoint为可见文档之外的元素返回null

Javascript 为什么document.elementFromPoint为可见文档之外的元素返回null,javascript,google-chrome,Javascript,Google Chrome,为什么document.elementFromPoint(5001000)在加载文档时,如果该像素位于可见文档之外,则返回null 我注意到document.elementFromPoint对于最初位于可见文档之外的任何点,以及在滚动到视图中之后,都返回null 一个简单的测试方法是在Chrome中(ctrl-shift-i->scripts->“watch expressions”)(确保页面高度缩小到1000像素以下) 编辑:因此根据 对于可见区域以外的点,始终返回null x和y相对于可见

为什么
document.elementFromPoint(5001000)
在加载文档时,如果该像素位于可见文档之外,则返回null

我注意到
document.elementFromPoint
对于最初位于可见文档之外的任何点,以及在滚动到视图中之后,都返回null

一个简单的测试方法是在Chrome中(ctrl-shift-i->scripts->“watch expressions”)(确保页面高度缩小到1000像素以下)

编辑:因此根据

  • 对于可见区域以外的点,始终返回null
  • x和y相对于可见屏幕的左上角和右上角

  • 我在这两个假设上都失败了,

    当您在窗口外指定一个点时,它不返回任何元素是有道理的。它返回在该点可见的元素,而不是在窗口大小不同时在该点可见的元素。考虑改变窗口的大小可能会导致元素移动,所以如果它返回了可能在那个点显示的元素,则不会得到一致的答案。


    无论您如何滚动窗口中的内容,窗口外的点仍然在窗口外。

    因此您回答了自己的问题:document.elementFromPoint在视口坐标中工作,而不是在document中工作。所以你需要做的就是添加一个滚动补偿

    以下代码适用于我:

    document.elementFromPoint(X - window.pageXOffset, Y - window.pageYOffset);
    
    或者,如果您正在收听以下事件:

    document.elementFromPoint(e.pageX - window.pageXOffset, e.pageY - window.pageYOffset);
    

    那么为什么当你滚动到那个点时它会返回null,使它可见呢?根据Mozilla文档,当它在可见范围之外时它应该返回null,我仍然不明白为什么当它滚动到视图时它仍然返回null。我在谷歌上找到了这个!这正是我要找的!非常感谢:汉克·安东!你拯救了这一天:)这很有效!我得到null是因为如果客户端没有从页面顶部向下滚动,元素就不可见了-谢谢。除非我真的将元素(element.scrollIntoView)滚动到视口中,否则我无法使它工作。如果元素位于视口之外,则滚动补偿似乎不起作用。有人可能有一个工作的演示吗?@BenBracha-我认为这个答案回答了一个不同的问题,即:“当我有文档坐标而不是视口坐标时,如何使elementFromPoint()工作?”显然,这个问题的答案解决了大多数人的问题。