2013-10-31 44 views
1

是否有类似于document.elementFromPoint(x,y)的元素在视口之外工作?Javascript获取元素在视口外点

根据该MDN文档为document.elementFromPoint()(https://developer.mozilla.org/en-US/docs/DOM/document.elementFromPoint

如果指定点是文档 的可见边界之外或任一坐标是负的,则结果为空。

因此,如果您试图抓取用户视口之外的元素,显然它不起作用。

谢谢!

+0

此功能请求被提交为https://www.w3.org/Bugs/Public/show_bug.cgi?id=20328(虽然没有5年的活动..) – Nickolay

回答

6

嘿我有同样的问题,如果元素不在视口的当前范围内elementFromPoint将返回null

我发现你必须滚动到元素位置才能使它在视口中可见,然后执行elementFromPoint

(function() { 
    'use strict'; 
    var api; 
    api = function(x,y) { 
    var elm, scrollX, scrollY, newX, newY; 
    /* Stash current Window Scroll */ 
    scrollX = window.pageXOffset; 
    scrollY = window.pageYOffset; 
    /* Scroll to element */ 
    window.scrollTo(x,y); 
    /* Calculate new relative element coordinates */ 
    newX = x - window.pageXOffset; 
    newY = y - window.pageYOffset; 
    /* Grab the element */ 
    elm = this.elementFromPoint(newX,newY); 
    /* revert to the previous scroll location */ 
    window.scrollTo(scrollX,scrollY); 
    /* returned the grabbed element at the absolute coordinates */ 
    return elm; 
    }; 
    this.document.elementFromAbsolutePoint = api; 
}).call(this); 

您可以简单地使用当过坐标是从pageXpageY绝对命令。

document.elementFromAbsoultePoint(2084, 1536); 

此代码也在GitHub上打包到一个bower组件中,以便于包含到项目中。

https://github.com/kylewelsby/element-from-absolute-point

希望这有助于你的项目。

+1

真棒,谢谢 - 这正是什么我在寻找。 – nickb