编辑: 小提琴添加:http://jsfiddle.net/tLued3x2/2/
我有这个可折叠树,它在点击每个节点时动态扩展。当没有。节点在水平方向上继续增加然后我需要使用D3内置拖动事件添加拖动功能。我从旧的类似问题中获得帮助,包括:
Avoid jumping of an SVG Text with text-anchor while dragging
但经过大量搜索和热门试验后,我得到了所需的功能:
d3.select("svg")
.call(d3.behavior.drag()
.origin(function() {
var t = d3.transform(d3.select(this).attr("transform"));
return {x: t.translate[0], y: t.translate[1]}})
.on("drag", dragmove));
function dragmove() {
var x = d3.event.x;
var y = d3.event.y;
d3.select("svg g").attr("transform", "translate(" + x + "," + y + ")");
}
但是当我尝试拖动树时,这个代码也会从当前鼠标位置跳到帧的最左侧或右侧,并且当树水平深度为8-9个节点时,拖动功能也不会能把我带到极端的节点。
那么有没有办法控制这种拖动,以便尽可能少地跳跃并平滑拖动到树的末端节点?
任何帮助都将不胜感激。
感谢 !!!
答案 0 :(得分:1)
可以使用jquery-UI
可拖动行为来完成此操作。
$('#div-containing-svg')
.draggable({axis: "x"})
.bind('mousedown', function(event, ui){
$(event.target.parentElement).append( event.target );
})
.bind('drag', function(event, ui){
// update left and top
event.target.setAttribute('x', ui.position.left);
event.target.setAttribute('y', ui.position.top);
});
div-conatining-svg的画布大小也必须能够在拖动时看到。所以大小也必须要控制。