gpt4 book ai didi

javascript - d3.js - 带有嵌套 g 节点的圆形包布局

转载 作者:行者123 更新时间:2023-11-28 02:26:39 25 4
gpt4 key购买 nike

我正在尝试实现圆形包装示例:http://bl.ocks.org/4063530 - 但我希望它使用嵌套的“g”节点,这样更容易设计和控制每个圆的子节点的可见性 - 但在这个示例中,所有节点在 dom 中都处于相同的深度。我如何嵌套它们?或者,如果不嵌套,如何仅选择圆的直接子代(而不是所有圆的所有子代)。我目前已修改示例以添加具有对象深度的类,如下所示:

d3.json("skills.json", function(error, root) {
var node = svg.datum(root).selectAll(".node")
.data(pack.nodes)
.enter().append("g")
.attr("class", function(d) { return "node node"+ d.depth; })

现在想要这样做:

d3.selectAll(".node1").on("mouseover",function(){
d3.select(this).classed("active",true).//SELECT ALL CHILDREN OF THE HOVERED NODE HERE

大家有什么想法吗?

最佳答案

我无法想出一种在打包数据后嵌套 g 元素的方法,所以这里有一个不太优雅的解决方案:

  function checkParent(d, w) {
if(!d.parent) return false;

if(d.parent == w) {
return true;
} else {
return checkParent(d.parent, w);
}
}

node.on("mouseover",function(d){
d3.select(this).classed("active",true);
d3.selectAll(".node")
.filter(function(w){ return checkParent(w, d); })
.classed("active",true);
});

node.on("mouseout",function(d){
d3.select(this).classed("active",false);
d3.selectAll(".node")
.filter(function(w){ return checkParent(w, d); })
.classed("active",false);
});

http://bl.ocks.org/4771875

关于javascript - d3.js - 带有嵌套 g 节点的圆形包布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com