码迷,mamicode.com
首页 > Web开发 > 详细

【 D3.js 进阶系列 — 6.2 】 饼状图的拖拽

时间:2015-01-06 13:53:13      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:drag   event   pie   饼状图   拖拽   

本文讲解稍微复杂一些的拖拽应用,即拖拽饼图的各部分。

技术分享

在【入门 - 第 9.1 章】讲解了如何制作饼状图。饼状图的各部分是用具有宽度的弧线来表示的。在与用户进行交互的时候,如果每一部分都能拖拽,是很有趣的。

1.饼状图的绘制

与【入门 - 第 9.1 章】稍有有些不同,我们对饼状图的每一个区域都使用一个 g 标签将其包围起来,以便平移操作。

		var gAll = svg.append("g")
					  .attr("transform","translate("+outerRadius+","+outerRadius+")");
					  
		var arcs = gAll.selectAll(".arcs_g")
					  .data(pie(dataset))
					  .enter()
					  .append("g")
					  .each(function(d){
                                                        //指定当前区域的平移量
							d.dx = 0;
							d.dy = 0;
					  })
					  .call(drag);      //调用drag函数

那么在平移的时候,只需要对各部分的 g 使用 transform 即可。在 drag 事件发生时,根据鼠标的参数即可计算出偏移量。上面使用了一个 each() 函数,为每一个区域添加两个变量: dx 和 dy 。用于保存偏移量。

2. drag 事件的定义

每次触发 drag 事件,我们只需要获取鼠标的偏移量,再将其加到原偏移量 dx 和 dy 上即可。

然后再使用 d3.select(this) 选择当前元素,给其应用 transform 即可完成平移操作。

				var drag = d3.behavior.drag()
					.origin(function(d) { return d; })
					.on("drag", dragmove);

		function dragmove(d) {
			d.dx += d3.event.dx;
			d.dy += d3.event.dy;
			d3.select(this)
				.attr("transform","translate("+d.dx+","+d.dy+")");
		}

3. 结果

结果如下,饼图的每一块都可以拖拽:

源代码单击以下链接后查看:

http://www.ourd3js.com/demo/J-6.2/dragpie.html

谢谢阅读。

文档信息

【 D3.js 进阶系列 — 6.2 】 饼状图的拖拽

标签:drag   event   pie   饼状图   拖拽   

原文地址:http://blog.csdn.net/lzhlzz/article/details/42457517

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!