所以我试图通过 z-index 控制相同大小元素的堆叠。现在,我最近遇到的一个想法是通过希望避免浏览器重排来避免通过 z-indices 并提高性能时间,而是通过我将事物附加到父级的顺序来排序层。
因此,如果我有一个包含所有堆叠 div 的容器 div,以及反映顺序的链表,引用堆叠 div,那么我会根据用户输入对 div 重新排序。然后,我不会更新 z 索引,而是重新创建 div 元素并按顺序附加所有内容。所以是这样的:
var from = nodeBeforeFrom; // Input
var target = nodeBeforeTarget; // Input
var linkedlist = input; // var linkedlist contains all the stacking divs
linkedlist.moveElement(div1, div2); //Move div1 to after div2
var container = document.createElement('div');
linkedlist.reorder; //
var cur = linkedlist.first;
while (cur.next) {
container.appendChild(cur)
cur = cur.next;
}
document.removeChild(oldContainer);
document.appendChild(container);
// This is meant as pseudocode so forgive an errors in regards to the specifics
所以我的问题如下:
- 这会将浏览器回流从 n 次回流减少到 1 或 2 次(其中 n 是 div 的数量)?如果我理解正确,更改单个元素的 z-index 应该会导致浏览器重绘或重排。
- 第二种方法是否会按照您添加元素的顺序工作和堆叠元素?
- 有没有办法使用 DOM 的子节点结构来移动孩子,所以我不必创建单独的链表?我只看到我目前可以使用的 removeChild 和 appendChild 函数。
是的,性能是一个问题,因为我打算将它用于图形和 html5 的东西。所以我可以保存我想保存的地方。