Javascript //大型目标节点 d3.选择(this.attr('transform',''); }) .on('mousedown',函数(d){ if(d3.event.ctrlKey)返回; //选择节点 mousedown_节点=d; 如果(mousedown\u node==选中的\u node)选中的\u node=null; else selected_node=鼠标向下_node; 所选链接=空; //重新定位拖曳线 拖曳线 .style('marker-end','url(#end arrow')) .classed('hidden',false) .attr('d','M'+mousedown_node.x+','+mousedown_node.y+'L'+mousedown_node.x+','+mousedown_node.y); 重启(); }) .on('mouseup',函数(d){ 如果(!mousedown_节点)返回; //FF所需 拖曳线 .classed('hidden',true) .style('marker-end',''); //检查是否拖动到自身 mouseup_节点=d; 如果(mouseup_节点===mousedown_节点){resetMouseVars();return;} //大型目标节点 d3.选择(this.attr('transform',''); //向图表添加链接(如果存在,则更新) //注意:链接严格是源
正如@Gerardo Furtado和@Sooraj Chandran已经提到的,不可能将Javascript //大型目标节点 d3.选择(this.attr('transform',''); }) .on('mousedown',函数(d){ if(d3.event.ctrlKey)返回; //选择节点 mousedown_节点=d; 如果(mousedown\u node==选中的\u node)选中的\u node=null; else selected_node=鼠标向下_node; 所选链接=空; //重新定位拖曳线 拖曳线 .style('marker-end','url(#end arrow')) .classed('hidden',false) .attr('d','M'+mousedown_node.x+','+mousedown_node.y+'L'+mousedown_node.x+','+mousedown_node.y); 重启(); }) .on('mouseup',函数(d){ 如果(!mousedown_节点)返回; //FF所需 拖曳线 .classed('hidden',true) .style('marker-end',''); //检查是否拖动到自身 mouseup_节点=d; 如果(mouseup_节点===mousedown_节点){resetMouseVars();return;} //大型目标节点 d3.选择(this.attr('transform',''); //向图表添加链接(如果存在,则更新) //注意:链接严格是源,javascript,d3.js,svg,Javascript,D3.js,Svg,正如@Gerardo Furtado和@Sooraj Chandran已经提到的,不可能将文本添加到路径。如果你改变这个 drag_line.append('svg:text') .attr('x', 50) .attr('y', 20) .attr('class', 'id') .text(functio
文本
添加到路径
。如果你改变这个
drag_line.append('svg:text')
.attr('x', 50)
.attr('y', 20)
.attr('class', 'id')
.text(function(d) {
return "Label";
});
var drag_line = svg.append('svg:path')
.attr('class', 'link dragline hidden')
.attr('d', 'M0,0L0,0');
var drag_line_text = svg.append('svg:text')
.attr('class', 'link draglinetext hidden')
.attr('x', '0');
.attr('y', '0');
drag_line
.style('marker-end', 'url(#end-arrow)')
.classed('hidden', false)
.attr('d', 'M' + mousedown_node.x + ',' + mousedown_node.y + 'L' + mousedown_node.x + ',' + mousedown_node.y);
drag_line_text
.classed('hidden', false)
.attr('x', mousedown_node.x)
.attr('y', mousedown_node.y);
drag_line
.classed('hidden', true)
.style('marker-end', '');
drag_line_text
.classed('hidden', true);
function mousemove() {
if(!mousedown_node) return;
// update drag line
drag_line.attr('d', 'M' + mousedown_node.x + ',' + mousedown_node.y + 'L' + d3.mouse(this)[0] + ',' + d3.mouse(this)[1]);
// update drag line text
drag_line_text
.attr('x', (mousedown_node.x + d3.mouse(this)[0]) / 2)
.attr('y', (mousedown_node.y + d3.mouse(this)[1]) / 2);
restart();
}
function mouseup() {
if(mousedown_node) {
// hide drag line
drag_line
.classed('hidden', true)
.style('marker-end', '');
// hide drag line text
drag_line_text
.classed('hidden', true);
}
// because :active only works in WebKit?
svg.classed('active', false);
// clear mouse event vars
resetMouseVars();
}
labels = svg.append('svg:g')
.selectAll('.labels');
labels = labels.data(links);
labels.exit().remove();
labels.enter()
.append("text")
.attr("text-anchor", "middle")
.attr("x", 0)
.attr("dy", 16)
.append("textPath")
.attr("startOffset", "50%")
.attr("xlink:href", function(d,i){ return "#id" + i})
.text("label");