确定DOM中每个元素的有效z-index(垂直堆栈位置)?

时间:2016-08-17 19:46:20

标签: javascript html dom z-index

我正在编写一个使用javascript来完成将HTML文档转换为SVG的工具。

这需要知道哪些元素可以与其他元素重叠,从而知道整个文档的整体z-index堆叠顺序。

所以我想为源页面中的每个元素分配一个数字,这样如果我将所有元素重新排列为彼此重叠,则数字将反映它们在该堆栈中的位置,其中1表示顶部(或底部),2成为下一个,等等。

这当然受z-index值的影响,但与它们没有直接关系。

我知道有一种方法可以自己使用仔细的DOM遍历和排序,但这会很棘手。

现有方法是否更容易?

我可以使用任何必要的库,但了解如何在vanillaJS中执行它会有所帮助。

谢谢!

编辑:当我调查自己时,绘画顺序上的CSS条目位于https://www.w3.org/TR/CSS21/zindex.html,在http://vanseodesign.com/css/css-stack-z-index/进行了健康的讨论

2 个答案:

答案 0 :(得分:3)

未经考验的想法:

  1. 使用CSS transform: translate()样式按摩整个DOM树,直到所有可见元素以其边界框在特定点重叠的方式堆叠,例如在文档的左上角。
  2. 使用文档document.elementFromPoint
  3. 获取最顶层的元素
  4. 使用pointer-events:none;设置元素的样式,这会将其排除在元素检索
  5. 之外
  6. 转到2
  7. 这应该给你总排序。

答案 1 :(得分:1)

老实说,这很难回答你说:

  

这当然受z-index值的影响,但与它们没有直接关系。

但是,如果我只是回答标题中的问题:

  

确定DOM中每个元素的有效z-index(垂直堆栈位置)?

如果您知道元素的id(或名称),那么获取zIndex相对容易,因为您可以获得任何dom元素的z-index:

document.getElementById('someID').style.zIndex;

对于任何其他答案,您需要缩小要求范围。