关于d3.js绘制的树中g元素的拖动的功能实现

本文介绍了如何在d3.js绘制的树状图中实现g元素的拖动功能。作者在项目中遇到此需求,并参考了相关文章,详细解释了dragmove方法的实现,包括确定拖拽原点和根据鼠标位置改变树的位置。同时,提供了相关demo链接以帮助读者更好地理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人在做项目的时候,遇到了需要将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.该博主
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值