D3.js动态设置节点可见性
d3.js dynamically set node visibility
在d3中.js我有一个不同节点的力布局。所有这些不同的节点都是不同组的一部分。对于每个组,我都有一个"超级节点",我想代表所有正常节点。这就是我定义节点的方式:
//Nodes are defined.
var node = g.selectAll(".node")
.data(nodes);
var nodeEnter = node.enter().append("g")
.attr("class", "node");
//Image is added for each node, depending on what type it is.
nodeEnter.append("image")
.attr("xlink:href", function(d) {
if (d.id == "supernode") {
return "../icons/supernodes/" + d.type + ".png";
} else {
return "../icons/" + d.type + ".png";
}
})
.attr("x", -25)
.attr("y", -25)
.attr("width", 50)
.attr("height", 50);
// .style("visibility", function(d) {
// return d.id == "supernode" ? "hidden" : "visible";
// });
我有一个按钮,当我单击时,我想在显示超级节点和隐藏节点之间切换,反之亦然。我检查哪一个应该发生在一个名为"superNodeDisplay"的布尔值中。我有一种方法可以切换可见性:
var superNodeShown = false;
function bundleNodes() {
console.log("before",node);
if (!superNodeShown){
node.style("visibility", function(d) {
if (d.id =="supernode") return "visible";
else return "hidden";
});
}
else{
node.style("visibility", function(d) {
if (d.id =="supernode") return "hidden";
else return "visible";
});
}
superNodeShown = !superNodeShown;
console.log("after",node);
}
//button click event
d3.select('#buttonTest').on('click', function() {
bundleNodes();
});
现在,当您看到用于定义节点的代码时,我已经注释掉了样式。这样它就可以正常工作,节点在单击按钮时切换。但是,以这种方式,当我启动页面时,所有节点,正常节点和超级节点都是可见的。我希望在启动时只有普通节点可见(您可以通过查看注释掉的nodeEnter.style来判断)。如果我取消注释该部分代码,它将不再起作用。
我可以在您的代码中找到以下问题。
-
像这样有一个错误的分号
.attr("height", 50);.style(...
这可能是一个错字。 -
您应该隐藏节点组元素,而不是单独隐藏图像。
试试这种方式。
nodeEnter.style("visibility", function(d) {
return d.id == "supernode" ? "hidden" : "visible";
});
相关文章:
- 在网格视图的自动刷新过程中,设置内部网格视图文本框的可见性
- 通过单选按钮状态设置HTML元素的可见性
- 如何在javascript中设置asp:checkbox的可见性
- 在 Zkoss 中选中的复选框设置为禁用(真),但我希望复选框和勾选的可见性保持不变
- D3.js动态设置节点可见性
- 取消设置元素可见性,更改 innerHTML,然后转换回来
- 无法手动将 DIV 元素上的可见性设置为 true.“TH:IF”问题
- 导航栏可见性点在自上而下滚动后自动调整
- 检查并设置表格行的可见性
- 页面加载时,图像的可见性值是否设置为隐藏
- 按序列名称设置动态图的初始列可见性
- 设置可见性与隐藏/显示
- getElementById在将可见性设置为隐藏后不查找元素
- 如何使可见性:隐藏链接不可点击
- 改变点击时元素的可见性
- 根据Knockout.JS中选择的下拉值设置文本框的可见性
- 访问隐藏字段的值,如果它的可见性设置为false(使用c#)
- 将加载层的可见性设置为false,除了Openlayers 2.x中选中的那个
- 如何在另一次选中时取消选中复选框,并将控件可见性设置为false
- 将图像可见性设置为假