Các giải pháp sạch, nhanh và dễ dàng được đăng kể từ ngày của câu trả lời này là không thỏa đáng. Chúng được xây dựng trên tuyên bố thiếu sót rằng các tài liệu SVG thiếu thứ tự z. Thư viện cũng không cần thiết. Một dòng mã có thể thực hiện hầu hết các hoạt động để thao tác thứ tự z của các đối tượng hoặc nhóm đối tượng có thể được yêu cầu trong quá trình phát triển ứng dụng di chuyển các đối tượng 2D xung quanh trong không gian xyz.
Thứ tự Z chắc chắn tồn tại trong các mảnh tài liệu SVG
Cái được gọi là một đoạn tài liệu SVG là một cây các phần tử có nguồn gốc từ kiểu nút SVGE bổ sung. Nút gốc của một đoạn tài liệu SVG là một SVGSVGEuity, tương ứng với thẻ <svg> HTML5 . SVGGEuity tương ứng với thẻ <g> và cho phép tổng hợp trẻ em.
Có một thuộc tính chỉ mục z trên SVGEuity như trong CSS sẽ đánh bại mô hình kết xuất SVG. Phần 3.3 và 3.4 của Khuyến nghị SV3 W3C v1.1 Phiên bản 2 cho biết rằng các đoạn tài liệu SVG (cây con từ một SVGSVGEuity) được hiển thị bằng cách sử dụng tìm kiếm độ sâu của cây . Sơ đồ đó là thứ tự az theo mọi nghĩa của thuật ngữ.
Thứ tự Z thực sự là một phím tắt tầm nhìn máy tính để tránh sự cần thiết phải hiển thị 3D thực sự với sự phức tạp và nhu cầu tính toán của phương pháp dò tia. Phương trình tuyến tính cho chỉ số z ẩn của các phần tử trong một đoạn tài liệu SVG.
z-index = z-index_of_svg_tag + depth_first_tree_index / tree_node_qty
Điều này rất quan trọng vì nếu bạn muốn di chuyển một vòng tròn nằm dưới một hình vuông lên trên nó, bạn chỉ cần chèn hình vuông trước vòng tròn. Điều này có thể được thực hiện dễ dàng trong JavaScript.
Phương pháp hỗ trợ
Các trường hợp SVGE bổ sung có hai phương thức hỗ trợ thao tác đơn hàng z đơn giản và dễ dàng.
- cha mẹ.removeChild (con)
- cha mẹ.insertB Before (con, conRef)
Câu trả lời đúng không tạo ra sự lộn xộn
Vì thẻ SVGGE bổ sung ( thẻ <g> ) có thể được gỡ bỏ và chèn dễ dàng như SVGCircleEuity hoặc bất kỳ hình dạng nào khác, các lớp hình ảnh điển hình của các sản phẩm Adobe và các công cụ đồ họa khác có thể được thực hiện dễ dàng bằng cách sử dụng SVGGEuity. JavaScript này về cơ bản là một lệnh Move Dưới .
parent.insertBefore(parent.removeChild(gRobot), gDoorway)
Nếu lớp robot được vẽ là con của SVGGEuity gRobot nằm trước ô cửa được vẽ là con của SVGGEuity gDoorway, thì robot hiện đang ở phía sau ô cửa vì thứ tự z của ô cửa giờ là một thứ tự cộng với thứ tự z của robot.
Một Move Trên lệnh là gần như là dễ dàng.
parent.insertBefore(parent.removeChild(gRobot), gDoorway.nextSibling())
Chỉ cần nghĩ a = a và b = b để ghi nhớ điều này.
insert after = move above
insert before = move below
Rời khỏi DOM trong trạng thái phù hợp với quan điểm
Lý do câu trả lời này là chính xác vì nó tối thiểu và đầy đủ và, giống như phần bên trong của các sản phẩm Adobe hoặc các trình chỉnh sửa đồ họa được thiết kế tốt khác, để biểu diễn bên trong ở trạng thái phù hợp với chế độ xem được tạo bằng cách hiển thị.
Phương pháp thay thế nhưng có giới hạn
Một cách tiếp cận khác thường được sử dụng là sử dụng CSS z-index kết hợp với nhiều đoạn tài liệu SVG (thẻ SVG) với nền chủ yếu là trong suốt ở tất cả trừ phần dưới cùng. Một lần nữa, điều này đánh bại sự thanh lịch của mô hình kết xuất SVG, khiến việc di chuyển các vật thể lên hoặc xuống theo thứ tự z trở nên khó khăn.
GHI CHÚ:
- ( https://www.w3.org/TR/SVG/render.html v 1.1, Phiên bản 2, ngày 16 tháng 8 năm 2011)
3.3 Kết xuất các phần tử thứ tự trong một đoạn tài liệu SVG có thứ tự vẽ ngầm, với các phần tử đầu tiên trong đoạn tài liệu SVG được "vẽ" trước. Các yếu tố tiếp theo được sơn lên trên các yếu tố được sơn trước đó.
3.4 Cách các nhóm được kết xuất Nhóm các phần tử, chẳng hạn như phần tử 'g' (xem các phần tử vùng chứa) có tác dụng tạo ra một khung vẽ riêng tạm thời được khởi tạo thành màu đen trong suốt trên đó các phần tử con được vẽ. Sau khi hoàn thành nhóm, mọi hiệu ứng bộ lọc được chỉ định cho nhóm sẽ được áp dụng để tạo một khung vẽ tạm thời được sửa đổi. Canvas tạm thời được sửa đổi được kết hợp vào nền, có tính đến bất kỳ cài đặt che khuất và độ mờ nào ở cấp độ nhóm trong nhóm.