本人在做项目的时候,遇到了需要将d3.js绘制出来的树进行拖动的问题。
1.先贴创建该树的源码
//该树的结构
var treeData = [
{
name: "原问题",
description: "",
_prototype: "_question",
children: []
}
];
// ************** Generate the tree diagram *****************
//定义树图的全局属性(宽高)
//
var margin = { top: 20, right: 120, bottom: 20, left: 120 },
width = 4600 - margin.right - margin.left,
height = 1400 - margin.top - margin.bottom;
var i = 0,
duration = 750, //过渡延迟时间
root;
var tree = d3.layout
.tree() //创建一个树布局
.size([height, width]);
var diagonal = d3.svg.diagonal().projection(function(d) {
return [d.y, d.x];
}); //创建新的斜线生成器
//实例化树
root = treeData[0]; //treeData为上边定义的节点属性
root.x0 = height / 2;
root.y0 = 0;
var xx = root.x0; //树一开始的位置
var yy = root.y0;
//声明与定义画布属性
var svgger = d3.select("#mainTree").append("svg");
var svg = svgger
.attr("id","the_svg")
.attr("width", width + margin.right + margin.left)
.attr("height", height + margin.top + margin.bottom + 2000)
.attr("xmlns", "http://www.w3.org/2000/svg")
.append("g")
.attr("transform", "translate(" + xx + "," + yy + ")");
2.渲染出来的结构如图,这是一个根节点
3.右键原问题,点击分解子问题(生成新的节点)
4.生成子节点如图
5.继续生成节点
接下来就遇到了怎么去写一个dragmove方法,来实现拖动这棵树的问题,我参考了
http://blog.youkuaiyun.com/u014291497/article/details/52023370
这位博主的博客,发现和我的情况有点差异。
1.该博主拖动的元素是circle,而我需要拖动的是g元素,如图
2.该博主