11

当我点击一个节点时,我的节点会变大,现在它变大了,我希望他的冲锋能更击退其他节点。如何更改节点的费用?

代码摘录:

[...]

//draw new graph
d3.json(file, function(error, graph) {

force
.nodes(graph.nodes)
.links(graph.links)
.start();

var nodeCircle = node.append("circle")
.attr("id", function(d) { return "node"+d.id })
.attr("class", function(d) {return "node "+d.nodeclass; })
.attr("r", 8) // R = Radius of node
.style("fill", function(d) { return d.color; }) // Will overwrite CSS style
.on("click",function(d) {

    //When CTRL key is pressed ....
    if (d3.event.ctrlKey) {
        if(d3.select(this).attr('r')==8){
            d3.select(this).attr('r', 12);
            //ToDo: node Charge = -1000
        }else{
            d3.select(this).attr('r', 8);
            //ToDo: node Charge = -500
        }
    }

}).call(force.drag);
[...]
4

2 回答 2

8
function click(d1,i){
    force.charge(
            function(d2,i){
                if(d2!=d1)
                    return ...;//calculate your charge for other nodes
                else
                    return ...;//calculate your charge for the clicked node
            });

        force.start();
 }

这对我来说很好!如我错了请纠正我..!

于 2014-03-26T17:51:25.953 回答
5

文档中

force.charge([收费])

如果指定了电荷,则将电荷强度设置为指定值。如果未指定充电,则返回当前充电强度,默认为 -30。如果电荷是常数,则所有节点都具有相同的电荷。否则,如果 charge 是一个函数,则对每个节点(按顺序)评估该函数,传递节点及其索引,并将 this 上下文作为强制布局;然后使用该函数的返回值来设置每个节点的费用。每当布局开始时,都会评估该函数。

所以你需要做的是指定一个函数charge(),为有问题的节点提供不同的费用,然后重新开始布局。

于 2013-05-18T01:48:36.473 回答