确定 DOM 中每个元素的有效 z-index(垂直堆栈位置)?
Determine effective z-index (vertical stack position) of each element in the DOM?
我正在编写一个工具,该工具使用 javascript 来执行诸如将 HTML 文档转换为 SVG 之类的操作。
这需要知道哪些元素可以与其他元素重叠,从而了解整个文档的整体 z-index 堆叠顺序。
所以我想为源页面中的每个元素分配一个编号,这样如果我重新排列所有元素使其彼此重叠,该编号将反映它们在该堆栈中的位置,1 表示顶部(或底部) , 2 是下一个,依此类推
这当然受 z-index 值的影响,但与它们没有直接关系。
我知道有一种方法可以自己使用谨慎的 DOM 遍历和排序来完成,但这会很棘手。
是否有更简单的现有方法?
我可以使用任何必要的库,但了解如何在 vanillaJS 中使用会很有帮助。
谢谢!
编辑:当我考虑自己滚动时,绘画顺序的 CSS 条目位于 https://www.w3.org/TR/CSS21/zindex.html, with a healthy discussion at http://vanseodesign.com/css/css-stack-z-index/
嗯,老实说,这很难回答你说:
This is of course influenced by z-index values but is not directly related to them.
但是,如果我简单回答标题中的问题:
Determine effective z-index (vertical stack position) of each element in the DOM?
如果您知道元素的 ID(或名称),那么获取 zIndex 就相对容易,因为您可以通过以下方式获取任何 dom 元素的 z-index:
document.getElementById('someID').style.zIndex;
对于任何其他答案,您需要缩小您的要求。
未经检验的想法:
- 使用 CSS
transform: translate()
样式按摩整个 DOM 树,直到 所有 可见元素以其边界框重叠的方式堆叠在特定点,例如在文档的左上角。
- 获取文档最顶层的元素
document.elementFromPoint
- 使用
pointer-events:none;
设置元素样式,这会将它从元素检索中排除
- 转到 2
这应该会给你总排序。
我正在编写一个工具,该工具使用 javascript 来执行诸如将 HTML 文档转换为 SVG 之类的操作。
这需要知道哪些元素可以与其他元素重叠,从而了解整个文档的整体 z-index 堆叠顺序。
所以我想为源页面中的每个元素分配一个编号,这样如果我重新排列所有元素使其彼此重叠,该编号将反映它们在该堆栈中的位置,1 表示顶部(或底部) , 2 是下一个,依此类推
这当然受 z-index 值的影响,但与它们没有直接关系。
我知道有一种方法可以自己使用谨慎的 DOM 遍历和排序来完成,但这会很棘手。
是否有更简单的现有方法?
我可以使用任何必要的库,但了解如何在 vanillaJS 中使用会很有帮助。
谢谢!
编辑:当我考虑自己滚动时,绘画顺序的 CSS 条目位于 https://www.w3.org/TR/CSS21/zindex.html, with a healthy discussion at http://vanseodesign.com/css/css-stack-z-index/
嗯,老实说,这很难回答你说:
This is of course influenced by z-index values but is not directly related to them.
但是,如果我简单回答标题中的问题:
Determine effective z-index (vertical stack position) of each element in the DOM?
如果您知道元素的 ID(或名称),那么获取 zIndex 就相对容易,因为您可以通过以下方式获取任何 dom 元素的 z-index:
document.getElementById('someID').style.zIndex;
对于任何其他答案,您需要缩小您的要求。
未经检验的想法:
- 使用 CSS
transform: translate()
样式按摩整个 DOM 树,直到 所有 可见元素以其边界框重叠的方式堆叠在特定点,例如在文档的左上角。 - 获取文档最顶层的元素
document.elementFromPoint
- 使用
pointer-events:none;
设置元素样式,这会将它从元素检索中排除 - 转到 2
这应该会给你总排序。