d3.json("testjson.json", function(root) {
var hierarchy = d3.hierarchy(root),
links = hierarchy.links()
nodes = hierarchy.descendants();
var startNode = null;
var link = svg.append("g")
.attr("class", "links")
.selectAll("line")
.data(links)
.enter().append("line")
.style("stroke", "#999")
.style("stroke-width", "1px");
var node = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(nodes)
.enter().append("circle")
.attr("r", 4.5)
.style("fill", function(d) { return z(d.parent && d.parent.data.name); })
.style("stroke", "#000")
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended))
.on("click", function(d, i)
{
var path1 = startNode && startNode.path(d) || []; //startNode.path() ruft path-funktion in d3 hierarchy auf
startNode = d;
link.style("stroke", function(d)
{
return path1.includes(d.source) && path1.includes(d.target) ? "#900" : "#999";
});
node.attr("r", function(d)
{
return path1.includes(d) || startNode == d ? 8 : 4.5;
});
});
simulation
.nodes(nodes)
.on("tick", function()
{
link
.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});
simulation.force("link")
.links(links);
});