Javascript 为什么在d3.behavior.drag()中没有定义'd'

Javascript 为什么在d3.behavior.drag()中没有定义'd',javascript,svg,d3.js,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)

我在试着使一个圆圈可以拖动

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 ] + ")"
      })
  })
这是你的电话号码

它在右红色圆圈上的每一步都会抛出错误,但为什么它会说第3、4和5行中的
d
未定义?

更新:

d
定义为
var d=d3.event

不过,稍后这里没有定义x和y:
返回“translate(“+[x,y]+”)
。我不知道你想在那里做什么。

工作小提琴:

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

知道为什么吗?所有示例似乎都将
d
作为处理程序的第一个参数。文档中没有:“drag”:在拖动元素时激发。d3.event将包含表示当前绝对拖动坐标的“x”和“y”属性…@Joe:是的。文档对回调的调用非常模糊。我想知道为什么我能找到的所有例子都接受一个论点,它必须是一个更早的版本或什么的。(这是我的+1 btw)为什么是-1?“不有用”是downvote按钮所说的,而这并不是远程“不有用”。参见第2点: