D3js链接不显示
我试图显示一些动态的D3js,并且除链接以外的所有内容都正常工作。有人能给我一些我做错的线索吗?D3js链接不显示
该代码创建一个圆形的无限毛毛虫,我试图添加一些动态来去的链接。代码添加节点和链接,直到数组达到25个项目。然后每次添加新项目时删除第一个项目。
//window var vv = window,
w = vv.innerWidth,
h = vv.innerHeight;
//canevas selection
var svg = d3.select("#animviz")
\t \t .append("svg")
\t \t .attr("width", w)
\t \t .attr("height", h);
//link and node class creation
svg.append("g").attr("class", "links");
svg.append("g").attr("class", "nodes");
//containers de noeuds et liens
var nodes = [{id:0}], links = [];
var iter = 1;
//repeat an action every "interval"
var interval = 0.1;
setInterval(function() {
\t addData();
\t update();
}, interval*1000);
function addData() {
\t var n = iter;
\t iter++;
\t nodes.push({id: n});
\t if(n > 25){
\t \t links.push({source: nodes[n%25], target: nodes[n%25+1]});
\t }
\t if (n > 25) {
\t \t nodes.splice(0, 1);
\t \t links.splice(0, 1);
\t }
}
var node = svg.select(".nodes").selectAll(".node"),
\t link = svg.select(".links").selectAll(".link");
function update() {
\t link = link.data(links, function(d) { return d});
\t link.enter()
\t .append("line")
\t .attr("class", "link")
\t .attr("stroke", "#ccc")
\t .attr("stroke-width", 2)
.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; });
\t link.exit().remove();
\t
\t node = node.data(nodes, function(d) { return d.id; });
\t node.enter()
\t .append("svg:circle")
\t .attr("class", "node");
\t node.attr("cx", function(d) { return 200 + 100 * Math.sin(d.id); })
.attr("cy", function(d) { return 200 + 100 * Math.cos(d.id); })
.attr("r", 4.5)
.attr("fill", "steelblue")
.attr("stroke", "black");
node.exit().remove(); \t
}
<!DOCTYPE html> <html>
<head>
<meta charset="UTF-8">
<title>Animal #1</title>
<script src="http://d3js.org/d3.v3.js" charset="utf-8"></script>
</head>
<body>
<div id="animviz"></div>
<div id="printzone"></div>
<script src="circular.js"></script>
</body>
</html>
谢谢!节点和链接
回答:
在当前代码中需要2个更正才能显示这些行。
您从一开始就拼接链接,只检查节点长度。考虑到只有当节点达到25时才开始添加链接,则不允许链接数组增长。移动拼接到自己的块
if (links.length > 2) { links.splice(0, 1);
}
属性部分必须
.attr("x1", function(d) { return 200 + 100 * Math.sin(d.source.id); }) .attr("y1", function(d) { return 200 + 100 * Math.cos(d.source.id); })
.attr("x2", function(d) { return 200 + 100 * Math.sin(d.target.id); })
.attr("y2", function(d) { return 200 + 100 * Math.cos(d.target.id); });
,因为你没有设置x或y为节点的任何地方。您正在为节点计算它们。
这些更改后,出现行/消失(见http://codepen.io/anon/pen/ZGyapY),但我不知道它看起来像一个毛毛虫:-)(您要添加的行按最后添加节点)
以上是 D3js链接不显示 的全部内容, 来源链接: utcz.com/qa/262270.html