Javascript 两个';呼叫';拖动d3中的事件
我在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 ) {
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布局添加拖放支持。
我喜欢这个解决方案。我早些时候找到了一份工作,但这应该很有效。