为什么不在d3.behavior.drag()中定义`d`

时间:2013-06-21 21:30:34

标签: javascript svg d3.js

我正试图让一个圆圈可以拖动。

var drag = d3.behavior.drag();
  drag.on("drag", function(d,i) {
      console.log(d);
      d.x += d3.event.dx;
      d.y += d3.event.dy;
      //This will change the center coordinates by the delta
      d3.select(this).attr("x", d.x).attr("y", d.y);
      //This should change the upper left x and y values by the delta
      d3.select(this).attr("transform", function(d,i){
          return "translate(" + [ x,y ] + ")"
      })
  })

以下是fiddle

它会在右侧红圈上的每次移动中抛出错误,但是为什么在第3,4和5行中d未定义?

2 个答案:

答案 0 :(得分:4)

工作小提琴:http://jsfiddle.net/6a6da/33/

d,i参数通常会引用绑定数据,但您不会绑定任何数据。在您的情况下,仅使用该事件就足够了。

drag.on("drag", function() {
  d3.select(this).attr("cx", +d3.select(this).attr("cx") + d3.event.dx);
  d3.select(this).attr("cy", +d3.select(this).attr("cy") + d3.event.dy);
})l

答案 1 :(得分:0)

更新:http://jsfiddle.net/6a6da/32/

d定义为var d = d3.event;

稍后,x和y在此处未定义:return "translate(" + [ x,y ] + ")"。我不确定你想做什么。