Javascript 在';上调用D3.JS函数;加载';而不是鼠标事件
我试图在这里对D3 sankey示例进行修改: 我想将每个节点的y位置移动到指定的位置(下例中为300px) 要实现这一点,我能看到的最直接的方法是简单地重新调整Javascript 在';上调用D3.JS函数;加载';而不是鼠标事件,javascript,d3.js,charts,data-visualization,nvd3.js,Javascript,D3.js,Charts,Data Visualization,Nvd3.js,我试图在这里对D3 sankey示例进行修改: 我想将每个节点的y位置移动到指定的位置(下例中为300px) 要实现这一点,我能看到的最直接的方法是简单地重新调整dragmove()的用途,以便在添加SVG元素后调用。我已在此函数中更改了d.y,以切换到300px: function dragmove(d) { d3.select(this).attr("transform", "translate(" + d.x + "," + (
dragmove()
的用途,以便在添加SVG元素后调用。我已在此函数中更改了d.y
,以切换到300px:
function dragmove(d) {
d3.select(this).attr("transform",
"translate(" + d.x + "," + (
d.y = 300
) + ")");
sankey.relayout();
link.attr("d", path);
}
添加节点时调用此函数:
var node = svg.append("g").selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; })
.call(d3.behavior.drag()
.origin(function(d) { return d; })
.on("dragstart", function() {
this.parentNode.appendChild(this); })
.on("drag", dragmove));
目前,在指定的鼠标事件中,它会按预期转换为300px,但我希望在添加了所有SVG元素后,它会自动转换
简单地使用.call()
而不使用鼠标事件是行不通的
我还尝试将移位合并到var节点中
:
return "translate(" + d.x + "," + 300 + ")"; })
但是,这会导致线索和节点之间不匹配,调用sankey.relayat()
似乎没有什么区别。找到了解决方案
首先,我删除了var节点
末尾的.call()
,因为我不需要拖动事件:
var node = svg.append("g").selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; });
然后我将d.y设置为任意位置(300):
最后,我强迫它在var节点之后立即重新绘制连接链接
sankey.relayout();
link.attr("d", path);
找到了解决办法
首先,我删除了var节点
末尾的.call()
,因为我不需要拖动事件:
var node = svg.append("g").selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; });
然后我将d.y设置为任意位置(300):
最后,我强迫它在var节点之后立即重新绘制连接链接
sankey.relayout();
link.attr("d", path);