更改所选节点样式,d3.js可折叠缩进树
Change selected nodes style, d3.js collapsible indented tree
我试图通过突出显示树中的"选定"节点以及根据是否显示子节点显示类似于加/减的图标,让用户更直观地表示他们在树中的位置。
我似乎找不到如何做到这一点的任何地方,因为似乎一旦在扩展后重新绘制树,所选节点信息就会消失,无法对其采取行动。 目前,我的树节点根据隐藏/显示或没有任何子节点突出显示,但我想用填充颜色跟踪单击了哪个节点。 我的树基于Mbostock的区块#1093025。 任何帮助都将不胜感激加号/减号图标切换,以及突出显示所选节点。
显示展开/折叠图标的当前代码:
nodeEnter.append("svg:image")
.attr("xlink:href", function(d) {
if (d._children) return "images/arrow_right.png";
else if (d.children) return "images/arrow_left.png";
})
.attr("x", "-12px")
.attr("y", "-10px")
.attr("width", 15)
.attr("width", 20);
使用用于调整大小的功能放大所选节点的功能...根本无法让这些工作或在重绘时识别所选节点。 似乎只有填充才能识别所选节点。
nodeEnter.append("rect")
.attr("y", newy)
.attr("height", newheight)
.attr("width", barWidth)
.style("fill", color)
.on("click", click);
function newy(d) {
if (d._isSelected)
return -barHeight / 1.25;
else
return -barheight/2;
}
function newheight(d) {
if (d._isSelected)
return barHeight * 1.75;
else
return barheight;
}
仅仅因为示例代码"忘记"了所选节点,并不意味着您不能自己添加它:
// Toggle children on click.
var lastClickD = null;
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
if (lastClickD){
lastClickD._isSelected = false;
}
d._isSelected = true;
lastClickD = d;
update(d);
}
// on the selected one change color to red
function color(d) {
if (d._isSelected) return 'red';
return d._children ? "#3182bd" : d.children ? "#c6dbef" : "#fd8d3c";
}
要添加展开/折叠指标,只需在重绘时根据其子状态更新节点:
// we used to set the text on enter
nodeEnter.append("text")
.attr("dy", 3.5)
.attr("dx", 5.5);
// but now we change it on update based on children
node.select('text')
.text(function(d) {
if (d.children) {
return '+' + d.name;
} else if (d._children) {
return '-' + d.name;
} else {
return d.name;
}
});
下面是一个示例。
相关文章:
- 如何在d3.js中返回路径的y坐标
- 有条件更新d3.js力图中节点的最佳方法
- 使用D3.js计算带有字母间距的文本长度
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- HTML5FileReader输出到D3.js图表
- D3.js生成有效的SVG,但不显示任何内容
- 更改 JS/D3 页上的元素位置
- 带有更新按钮.js D3 将新数据添加到旧数据而不是替换旧数据
- D3.js d3.max undefined
- 为什么我的 js.d3 代码不显示轴
- dc.js d3+crossfilter.top将过滤后的数据导出为CSV
- 如何在Plottable.js/D3.js制作的饼图中启用qtip2
- 2dimple.js/d3.js在窗口大小更改时自动调整图表大小
- D3.js D3.json返回Uncaught TypeError:无法读取属性'0'的未定义
- 如何计算(SVG) X/Y坐标的平移和旋转(在JS/D3.js)
- 当我们需要信任大约 200-300 个自定义图表时.js D3 是最佳选择吗?
- 简单条形图按字符串名称分组,带有 DC.js D3.js 和交叉过滤器.js
- 缺少标签- Cola.js/D3.js