Javascript 两个';呼叫';拖动d3中的事件

Javascript 两个';呼叫';拖动d3中的事件,javascript,d3.js,drag,force-layout,Javascript,D3.js,Drag,Force Layout,我在d3中使用了原力导向布局,我在开发中遇到了一些障碍 var circle = svg.append("svg:g").selectAll("circle") .data(force.nodes()) .enter().append("svg:circle") .attr("r", function( d ) { return d.fValue; }) .style('fill', function( d ) {

我在d3中使用了原力导向布局,我在开发中遇到了一些障碍

    var circle = svg.append("svg:g").selectAll("circle") 
     .data(force.nodes()) 
   .enter().append("svg:circle")   
     .attr("r", function( d ) { 
      return d.fValue; 
     }) 
     .style('fill', function( d ) { 
       return strokeColor( d.name );   
     })
     .call(force.drag);
基本上,我想在force.drag定义的“drag”行为中添加更多的事件侦听器,也就是说,我想确保节点在拖动时(而不是鼠标悬停时)会改变颜色。我能想到的唯一两种方法是以某种方式更改force.drag函数或定义新的拖动行为

我不知道第一种方法如何实现,但当我尝试第二种方法时,方法链接将只接受第二个拖动事件,而忽略第一个force.drag事件

.call(customDrag)
.call(force.drag); // This would work
如何附加另一个拖动事件侦听器或修改现有的force.drag以适应要添加的新动画


提前感谢

将您自己的侦听器定义为
force.drag
仅调用
force.tick()
afaik:

  var node_drag = d3.behavior.drag()
        .on("dragstart", dragstart)
        .on("drag", dragmove)
        .on("dragend", dragend);
  vis.selectAll("g.node").call(node_drag)
然后确保在
dragmove
中调用
tick()

我这样做是为了用force布局添加拖放支持。

我喜欢这个解决方案。我早些时候找到了一份工作,但这应该很有效。