【发布时间】:2015-12-16 18:47:17
【问题描述】:
我对 SVG 和 d3 库完全陌生。我需要向 svg 添加动态添加 5 个圆圈,其中都包含可拖动的事件处理程序。我已经编写了用于添加单个圆圈并向其添加可拖动行为的代码,并且工作正常。现在我在 for 循环中尝试同样的事情以添加 5 个圆圈。它显示所有圆圈,但是当我拖动一个特定的圆圈并将其放在某个位置时,它会停留在那里,当我触摸另一个圆圈时,旧圆圈会从我们放置的位置消失并出现在我们接下来开始的新圆圈上。请查看下面提到的代码。对此的任何帮助将不胜感激。
function addCircles()
{
var box = d3.select(".box");
for(var i = 0;i<5;i++)
{
var drag = d3.behavior.drag()
.on('dragstart', function() { console.log("dragstart"); circle.style('fill', 'red'); })
.on('drag', function() { console.log("drag X - " + d3.event.x + " Y - " + d3.event.y); circle.attr('cx', d3.event.x)
.attr('cy', d3.event.y); })
.on('dragend', function() { console.log("dragend - " + d3.event.x);
circle.style('fill', 'green'); });
var circle = box.selectAll('.draggableCircle'+i)
.data([{ x: i*15, y: i*15, r: 10 }])
.enter()
.append('svg:circle')
.attr('class', 'draggableCircle'+i)
.attr('cx', function(d) { return d.x; })
.attr('cy', function(d) { return d.y; })
.attr('r', function(d) { return d.r; })
.call(drag)
.style('fill', 'green');
}
}
我在 chrome 中调试代码后检查,发现没有检测到 dragEnd 的位置。
【问题讨论】:
-
你想把 JSFiddle 放在一起,这样我们就可以玩代码了吗?
-
没有得到你的问题。能否请您详细说明。
-
把你的代码放在这里:jsfiddle.net 这样我们就可以编辑、保存并向你展示工作示例,如果可能的话。只需确保您在左栏中引用 D3,在单独的窗口中引用 html javascript 和 css,按保存,将 URL 复制到此处,我们将查看 :)
-
请查看以下链接并尝试将每个绿色圆圈逐个拖动。 jsfiddle.net/ta2ek6zj/1
标签: javascript html d3.js svg