Javascript d3.js:鼠标悬停时的工具提示和属性更改

Javascript d3.js:鼠标悬停时的工具提示和属性更改,javascript,d3.js,tooltip,Javascript,D3.js,Tooltip,我已经集成到我的d3可视化中()。它们被简单地称为 .on("mouseover", tip.show) .on("mouseout", tip.hide) 现在我发现我无法添加其他鼠标功能,比如改变鼠标指向的对象的大小和颜色。当我尝试以下操作时,会显示工具提示或属性更改: on("mouseover", function(d){ tip.show; d3.select(this).attr("r", 10).style("fill", "orange"); }) .on("mouseou

我已经集成到我的d3可视化中()。它们被简单地称为

.on("mouseover", tip.show)
.on("mouseout", tip.hide)
现在我发现我无法添加其他鼠标功能,比如改变鼠标指向的对象的大小和颜色。当我尝试以下操作时,会显示工具提示或属性更改:

on("mouseover", function(d){
 tip.show;
 d3.select(this).attr("r", 10).style("fill", "orange");
})
.on("mouseout", function(d){
 tip.hide;
 d3.select(this).attr("r", 6).style("fill", "red");
})

我怎样才能把两者都展示出来

您需要调用工具提示函数:

.on("mouseover", function(d){
  tip.show(d);
  d3.select(this).attr("r", 10).style("fill", "orange");
}).on("mouseout", function(d){
  tip.hide(d);
  d3.select(this).attr("r", 6).style("fill", "red");
})

tip.show
tip.hide
是函数,在名称后添加括号表示正在调用它们。当不使用匿名函数(即,
function(){…}
)时,这是不必要的,因为D3知道正在传递一个函数,并且应该在运行时调用(即计算)。简言之,D3会自动调用作为参数传递的函数。

当您将tip.show函数包装在闭包中而不是直接作为回调传递时,您需要像调用任何其他函数一样调用它

on("mouseover", function(d){
 tip.show(d);
})

更新的小提琴:

哦,谢谢。好吧,另一个愚蠢的问题,为什么tip.show能起作用(如果只靠它自己的话)?谢谢。来自Java,JavaScript的松散规则有时让我感到困惑。实际上,如果我在自己的代码中使用
tip.show()
,同时更改大小和颜色,就会出现这种情况:
TypeError:d未定义且不显示工具提示。我需要使用mzulch建议的
tip.show(d)
。你知道为什么吗?我更新了提琴,以便将数据绑定到圆圈,但工具提示函数仍然可以在没有参数的情况下工作啊是--
d
是绑定到元素的数据,如果您需要在工具提示中使用它(即,您希望显示数据中定义的内容),则需要传递它。我已经更新了答案。在您只给出函数名的情况下,参数会自动传递。哦,是的,这很有意义,我没有想到在定义工具提示内容的代码中的另一个位置访问
d
。再次感谢你的帮助。作为D3Noob,我想知道为什么甚至可以调用没有括号的函数。