当前位置:  开发笔记 > 编程语言 > 正文

使用JavaScript,我可以更改SVG <g>元素的Z索引/层吗?

如何解决《使用JavaScript,我可以更改SVG<g>元素的Z索引/层吗?》经验,为你挑选了5个好方法。

假设我有几个复合形状().我希望能够点击并拖动它们,但是我希望我碰巧在Z顺序中将其拖动到另一个的TOP上,这样如果我将它拖到其他的那个上,那么另一个一个人应该黯然失色.



1> Sam..:

SVG中的Z索引由元素在文档中出现的顺序定义.如果要将特定形状置于顶部,则必须更改元素顺序.


不公平的是,这是公认的答案
@chharvey,您可以通过重新订购它们来重新排序 - 重新附加.这是一个优雅的例子:https://codepen.io/osublake/pen/YXoEQe

2> Erik Dahlstr..:

在树中移动元素的替代方法是使用更改xlink:href属性的元素,以便为您提供所需的z顺序.

这是svg-developers邮件列表上的一个旧线程,在想要动画某些形状的上下文中讨论这个主题.

更新:


    
    
    
    

在这个例子中,元素是最后一个元素,这使它成为最前面的元素.我们可以通过更改xlink:href属性来选择任何其他元素作为最前面的元素.在上面的例子中,我们选择了圆圈id="c1",这使它看起来像是最顶层的元素.

看小提琴.


`xlink:href`已被弃用,现在它只是`href`
工作,但让你适当地添加使用.如果您使用翻译,不了解它们

3> CoR..:

这是老问题,但......

在FireFox(7+)和Chrome(14+)上,您可以将svg_element拉到顶部.这并没有给你完全z轴控制的自由,但它总比没有好;)

只需再次添加该元素即可.

var svg = doc.createElemNS('svg');
var circle = doc.createElemNS('circle');
var line = doc.createElemNS('line');

svg.appendChild(circle); // appends it
svg.appendChild(line);   // appends it over circle
svg.appendChild(circle); // redraws it over line now

我以为它会抛出错误或其他东西.

appendChild ==替换自己==重绘


根本不是错误; `appendChild`首先从旧父节点删除,如果有的话,即使它与新父节点相同,然后将其添加到新父节点的子节点列表中.

4> 小智..:

是的,顺序是指定哪个对象将在另一个对象之前的顺序。要操纵顺序,您将需要移动有关DOM的内容。SVG Wiki上有一个很好的例子,网址为https://www.w3.org/TR/SVG11/render.html#RenderingOrder


该链接不再起作用。该链接解释了相同的想法:[link](http://www.w3.org/TR/1999/WD-SVG-19991203/render.html#RenderingOrder)

5> Roman Rekhle..:

未提及的另一种解决方案是将每个svg项目/项目集放入div。您可以轻松更改div的z索引。

小提琴:SVG元素以z-index为容器循环

...按下按钮可将该元素“推”到前面。(vs重新粉刷整个集合并将1个元素推到前面,但保持原始顺序与接受的解决方案中一样)

具有相对的z索引将非常好...

如果它是来自jsfiddle的链接,stackOverflow要我放代码吗?

var orderArray=[0,1,2];
var divArray = document.querySelectorAll('.shape');
var buttonArray = document.querySelectorAll('.button');

for(var i=0;i
svg {
    width: 100%;
    height: 100%;
    stroke: black;
    stroke-width:2px;
    pointer-events: all;
}
div{
    position:absolute;
}
div.button{
    top:55%;
    height:5%;
    width:15%;
    border-style: outset;
    cursor:pointer;
    text-align: center;
    background:rgb(175, 175, 234);
    
}
div.button:hover{
    border-style: inset;
    background:yellow;
    
}
div.button.first{
    left:0%;
}
div.button.second{
    left:20%;
}
div.button.third{
    left:40%;
}
lime
cyan
fuchsia
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有