2014-11-16 2 views
2

У меня есть нижняя вершина силового дерева. Как бы то ни было, поведение перетаскивания не работает, как ожидалось из коробки. Я не могу найти идеальный способ достижения желаемого поведения при перетаскивании. Как можно заметить, он в настоящее время находится в обратном направлении к дереву.d3.js Внизу - Верхняя компоновка силы - поведение перетаскивания

Блок - http://bl.ocks.org/git-ashish/6d5f8014661488ae786b

скрипку - http://jsfiddle.net/ashishsingh/jyrwsa0y/

function tick(e) { 

// Push sources up and targets down to form a weak tree. 
var k = 6 * e.alpha; 
json.links.forEach(function(d, i) { 
    d.source.y -= k; 
    d.target.y += k; 
}); 

node.attr("cx", function(d) { return d.x; }) 
    .attr("cy", function(d) { return h - d.y; }); 

link.attr("x1", function(d) { return d.source.x; }) 
    .attr("y1", function(d) { return h - d.source.y; }) 
    .attr("x2", function(d) { return d.target.x; }) 
    .attr("y2", function(d) { return h - d.target.y; }); 
} 

Любая помощь или направления будут оценены.

Спасибо.

ответ

5

Я не знаю, что вы подразумеваете в комментарии со «слабым деревом», но мне кажется, что вы хотите поставить источник вниз и цели, а не наоборот.

Изменение функции tick с этим:

function tick(e) { 

var k = 6 * e.alpha; 
json.links.forEach(function(d, i) { 
    d.source.y += k; 
    d.target.y -= k; 
}); 

node.attr("cx", function(d) { return d.x; }) 
    .attr("cy", function(d) { return d.y; }); 

link.attr("x1", function(d) { return d.source.x; }) 
    .attr("y1", function(d) { return d.source.y; }) 
    .attr("x2", function(d) { return d.target.x; }) 
    .attr("y2", function(d) { return d.target.y; }); 
} 

this behaviour (fiddle) Вы получаете, который сверху вниз перевернутый эквивалент this example, который, кажется, что вы хотите.

+0

Большое спасибо! Я сделал «толкание узлов» неправильно в моем случае. – ashish