Javascript检测元素前面的元素

时间:2015-02-27 22:59:07

标签: javascript overlay userscripts

如果覆盖元素是透明的,如何知道元素是否在另一个元素的前面?这样做的目的是,如果您通过ID人工点击页面元素,并且确保元素顶部没有覆盖,以确认点击是合成的(作为普通用户必须点击叠加)。

案例1 :叠加层是可点击元素的子项要检测它:确保可点击元素的子项看起来不寻常。< / p>

案例2:叠加层具有绝对位置和更高的z-index以覆盖可点击元素 要检测它:没有线索!除非您遍历DOM中每个元素的边界矩形和z-index,或者遍历整个DOM以查找特定的样式属性。这很贵。

因此,考虑到可以使元素覆盖另一个元素的方式的数量,用户脚本如何检测覆盖元素的元素?我怀疑一个非常冗长的方法来遍历整个DOM可能要避免。

1 个答案:

答案 0 :(得分:3)

事实证明,有两种方法可以做到这一点,我认为有两种方法可以确定任何给定元素是否是最不可能的元素。

改编自this blog post帖子并使用他们的代码(经过一些修改),可以在任何给定的鼠标位置看到最顶层的元素。我修改了他们的代码,以查找位置上任何元素的计算样式zIndex。这种方法的缺点是它的计算成本很高,因为你或多或少地在查看DOM中每个元素的位置。

This stack question关于检查元素是否真的在屏幕上可见,收到了一个链接到浏览器方法document.elementFromPoint的答案,当给定一些屏幕坐标时返回最顶层的元素,无论不透明度如何具有display风格。似乎至少Firefox和Chrome支持该功能。

最后,有两种解决方案可供选择,后者可能是可靠性和成本方面的最佳解决方案。

相关问题