【发布时间】:2016-05-16 22:48:12
【问题描述】:
当我修改布局时,我无法使用 d3js 删除强制导向可视化中的旧链接。这意味着旧链接不会被删除,而是保留在标签中。我确实关注了this example 并做了以下事情:
link = link.data(links, function(d) {
return d.source.id + '-' + d.target.id;
});
link.enter().append("g").attr("class", "link");
var linkline = link.append("line").attr("class", "linkline");
var linktext = link.append("text").attr("class", "linktext")
.text(function(d) {
return d[setup.label_edge];
});
link.exit().remove();
其余部分与示例中的几乎相同。但是,我无法摆脱旧链接,exit().remove() 不起作用。他们将留在可视化上。
这是我从 gilsha 执行 then 代码 sn-p 时得到的。 <g class="link">-tag 中仍有多个 linkline 和 linktext 条目。它们不可见并出现在左上角,但我仍然需要摆脱它们。因为当我拖动图表时,这会成为一个问题。
将link.append写入新变量时,它不再重复行和标签,但在调用update时,行保持在以前的位置并且不再移动。
这是勾号。我需要以某种方式链接 linkGroup 吗?
force.on("tick", function(e){
linkline
.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;
});
linktext
.attr("x", function(d) {
return ((d.source.x + d.target.x)/2);
})
.attr("y", function(d) {
return ((d.source.y + d.target.y)/2);
});
node.attr("transform", function(d) {
if(setup.source == 0) {
if(d.id==0){
damper = 0.1;
d.x = d.x + ($('svg').attr('width')/2 - d.x) * (damper + 0.02) * e.alpha;
d.y = d.y + ($('svg').attr('height')/2 - d.y) * (damper + 0.02) * e.alpha;
}
var x = Math.max(radius, Math.min($('svg').attr('width') - radius, d.x));
var y = Math.max(radius, Math.min($('svg').attr('height') - radius, d.y));
return "translate(" + x + "," + y + ")";
} else {
if(d.id==0){
damper = 0.1;
d.x = d.x + ($('svg').attr('width')/2 - d.x) * (damper + 0.02) * e.alpha;
d.y = d.y + ($('svg').attr('height')/2 - d.y) * (damper + 0.02) * e.alpha;
}
var x = Math.max(radius, Math.min($('svg').attr('width') - imagesize2(d.metadata[setup.external[1]])[0], d.x));
var y = Math.max(radius, Math.min($('svg').attr('height') - imagesize2(d.metadata[setup.external[1]])[1], d.y));
return "translate(" + x + "," + y + ")";
}
});
【问题讨论】:
标签: javascript d3.js force-layout