【发布时间】:2021-10-14 19:36:12
【问题描述】:
我开发了一个显示 d3 对角树的小程序。该图可通过拖动背景进行导航。
它基于以下链接中的代码: https://bl.ocks.org/adamfeuer/042bfa0dde0059e2b288
我正在尝试在页面上添加垂直线以进一步注释树/图表(基于以下链接:https://bl.ocks.org/dimitardanailov/99950eee511375b97de749b597147d19)。
见下文:
请看这里:https://jsfiddle.net/chrisclarkson100/opfq6ve8/28/
我将线条附加到图表中,如下所示:
var data_line = [
{
'x1': 300,
'y1': 700,
'x2': 300,
'y2': 700
},
////....
];
// Generating the svg lines attributes
var lineAttributes = {
....
'x1': function(d) {
return d.x1;
},
'y1': function(d) {
return screen.availHeight;
},
'x2': function(d) {
return d.x2;
},
'y2': function(d) {
return 0;
}
};
var drag_line = d3.behavior.drag()
.origin(function(d) { return d; })
.on('drag', dragged_line);
// Pointer to the d3 lines
var svg = d3.select('body').select('svg');
var lines = svg
.selectAll('line')
.data(data_line)
.enter().append('g')
.attr('class', 'link');
links_lines=lines.append('line')
.attr(lineAttributes)
.call(drag_line);
lines.append('text')
.attr('class','link_text')
.attr("x", d => d.x1)
.attr("y", d => 350)
.style('fill', 'darkOrange')
.style("font-size", "30px")
function dragged_line() {
var x = d3.event.dx;
var y = d3.event.dy;
var line = d3.select(this);
// Update the line properties
var attributes = {
x1: parseInt(line.attr('x1')) + x,
y1: parseInt(line.attr('y1')) + y,
x2: parseInt(line.attr('x2')) + x,
y2: parseInt(line.attr('y2')) + y,
};
line.attr(attributes);
}
线条按我想要的方式显示并且可以拖动。但是,当我拖动它们时,背景/树网络会随着它们移动......我希望不同的可拖动元素彼此独立。
任何人都可以发现我是如何未能使每个元素的拖动交互相互独立的吗?
【问题讨论】:
-
克里斯,你能用你的代码发布JSFiddle 来证明这个问题吗?这将使人们更容易找到解决方案并发布答案。
-
嗨 @Addam F 这里是 jsfiddle 的链接,有问题的代码是从第 648 行到第 672 行:jsfiddle.net/chrisclarkson100/opfq6ve8/28