Bu cevabın tarihi itibariyle yayınlanan temiz, hızlı ve kolay çözümler tatmin edici değildir. Bunlar, SVG belgelerinin z sırasına sahip olmadığı kusurlu beyanı üzerine inşa edilmiştir. Kütüphaneler de gerekli değildir. Bir kod satırı, 2B nesneleri bir xyz alanında hareket ettiren bir uygulamanın geliştirilmesinde gerekli olabilecek nesnelerin veya nesne gruplarının z sırasını değiştirmek için çoğu işlemi gerçekleştirebilir.
Z Düzeni SVG Belge Parçalarında Kesinlikle Var
SVG belge parçası olarak adlandırılan, temel düğüm tipi SVGElement'den türetilen bir öğeler ağacıdır. SVG belge parçasının kök düğümü, bir HTML5 <svg> etiketine karşılık gelen bir SVGSVGElement öğesidir . SVGGElement, <g> etiketine karşılık gelir ve toplama çocuklarına izin verir.
CSS'de olduğu gibi SVGElement üzerinde bir z-endeksi özniteliğine sahip olmak SVG oluşturma modelini yener. W3C SVG Tavsiye v1.1 2. Baskı'nın 3.3 ve 3.4 bölümleri, SVG belge parçalarının (bir SVGSVGElement nesnesinden gelen ağaçlar) ağacın derinlik ilk araştırması kullanılarak oluşturulduğunu belirtir . Bu şema, terimin her anlamında az düzendir.
Z sırası, ışın izlemenin karmaşıklıkları ve hesaplama talepleriyle gerçek 3D renderleme ihtiyacını ortadan kaldırmak için bir bilgisayar görme kısayolu. Bir SVG belge parçasındaki öğelerin örtük z-endeksi için doğrusal denklem.
z-index = z-index_of_svg_tag + depth_first_tree_index / tree_node_qty
Bu önemlidir, çünkü karenin altındaki bir daireyi onun üstüne taşımak istiyorsanız, kareyi dairenin önüne yerleştirmeniz yeterlidir. Bu, JavaScript'te kolayca yapılabilir.
Destekleyici Yöntemler
SVGElement örneklerinin basit ve kolay z sırası manipülasyonunu destekleyen iki yöntemi vardır.
- parent.removeChild (çocuk)
- parent.insertBefore (çocuk, childRef)
Dağınıklık Yaramayan Doğru Cevap
SVGGElement ( <g> etiketi) bir SVGCircleElement veya başka bir şekil kadar kolay bir şekilde çıkarılabildiğinden ve eklenebildiğinden, Adobe ürünlerine ve diğer grafik araçlarına özgü görüntü katmanları SVGGElement kullanılarak kolaylıkla uygulanabilir. Bu JavaScript aslında Aşağı Taşı komutudur.
parent.insertBefore(parent.removeChild(gRobot), gDoorway)
SVGGElement gRobot'un çocukları olarak çizilen bir robotun katmanı, SVGGElement gDoorway'in çocukları olarak çizilen kapının önünde olsaydı, robot şimdi kapının arkasındadır, çünkü kapının z sırası bir artı robotun z sırasıdır.
Bir şeyden Taşı komutu kolay neredeyse olduğunu.
parent.insertBefore(parent.removeChild(gRobot), gDoorway.nextSibling())
Bunu hatırlamak için sadece a = a ve b = b'yi düşünün.
insert after = move above
insert before = move below
DOM'u Görünümle Tutarlı Bir Devlette Bırakma
Bu cevabın doğru olmasının nedeni, minimal ve eksiksiz olması ve Adobe ürünlerinin veya diğer iyi tasarlanmış grafik editörlerinin gibi, dahili gösterimi, oluşturmayla oluşturulan görünümle tutarlı bir durumda bırakmasıdır.
Alternatif Ama Sınırlı Yaklaşım
Yaygın olarak kullanılan bir başka yaklaşım, CSS z-endeksini, altta hariç tümü şeffaf arka plana sahip birden fazla SVG belge parçası (SVG etiketi) ile birlikte kullanmaktır. Yine, bu, SVG oluşturma modelinin zarafetini yenerek, nesneleri z düzeninde yukarı veya aşağı taşımayı zorlaştırır.
NOTLAR:
- ( https://www.w3.org/TR/SVG/render.html v 1.1, 2. Baskı, 16 Ağustos 2011)
3.3 Bir SVG belge parçasındaki Sipariş Verme Öğeleri, SVG belge parçasındaki ilk öğeler ilk önce "boyanır", örtük bir çizim sırasına sahiptir. Müteakip elemanlar önceden boyanmış elemanların üstüne boyanır.
3.4 Gruplar nasıl oluşturulur? 'G' elemanı gibi gruplandırma elemanları (kap elemanlarına bakınız), alt elemanların boyanacağı şeffaf siyah olarak başlatılan geçici ayrı bir tuval üretme etkisine sahiptir. Grubun tamamlanmasının ardından, değiştirilmiş geçici bir tuval oluşturmak için grup için belirtilen filtre efektleri uygulanır. Değiştirilmiş geçici tuval, gruptaki tüm grup düzeyinde maskeleme ve opaklık ayarları dikkate alınarak arka planda birleştirilir.