Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在';上调用D3.JS函数;加载';而不是鼠标事件_Javascript_D3.js_Charts_Data Visualization_Nvd3.js - Fatal编程技术网

Javascript 在';上调用D3.JS函数;加载';而不是鼠标事件

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 + "," + (

我试图在这里对D3 sankey示例进行修改:

我想将每个节点的y位置移动到指定的位置(下例中为300px)

要实现这一点,我能看到的最直接的方法是简单地重新调整
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);