Javascript d3.js中的HTML工具提示清理

Javascript d3.js中的HTML工具提示清理,javascript,jquery,tooltip,d3.js,Javascript,Jquery,Tooltip,D3.js,我已经在d3.js中实现了以下HTML工具提示,代码如下: function onmouseover(d) { $("#tooltip").fadeOut(100,function () { // generate tooltip $("#tooltip").fadeIn(100); }); } function onmouseout() { $("#tooltip").fadeOut(250); } 它可以工作,但是如果鼠标在多个节点

我已经在d3.js中实现了以下HTML工具提示,代码如下:

function onmouseover(d) {
    $("#tooltip").fadeOut(100,function () {
        // generate tooltip
        $("#tooltip").fadeIn(100);
    });
}

function onmouseout() {
    $("#tooltip").fadeOut(250);
}
它可以工作,但是如果鼠标在多个节点上快速移动,工具提示可能会停留在页面上。它们表现出同样的行为(高兴地扭动!)

做了一些研究后,似乎已经很好地解决了这个问题。然而,我不太清楚调度是如何工作的,根据我的想象,在这种情况下可能有一种更简单的方法

更新

此问题仅因fadeIn和fadeOut而出现。如果这些设置为零,则没有问题。所以问题是,是否有可能设置它,以便在出现另一个mouseover/out事件时,fadeIn/out被中断

分辨率

问题是只有一个工具提示。在JQuery FAUDUT的中间,这不能对事件作出响应。答案是有多个工具提示,这样一个可以淡入,而旧的则淡出。这可以通过两种方式实现:

  • JQuery淡出
  • CSS转换(用户使用的转换)

NVD3的解决方案是,每次在任何节点上发生mouseout事件时都运行清理方法。请参见第78行的来源:。 这不必通过d3.dispatch来完成;这也可以直接完成


您还可以研究为可靠捕获
mouseout
事件而建议的一些解决方法:

我会尝试使用
mousemove
事件来代替它(但它通常会被拒绝),并将
fadeOut
移动到svg的
mousemove
。尽管如此,即使鼠标位于元素内部,后者也会触发。如果
鼠标位于每个节点的
鼠标上方
鼠标移出
,svg上的
鼠标移出
会触发
淡出
,如果
鼠标位于
节点内部
,则会触发
淡出
。我担心的是,如果在淡出过程中发生另一个事件(即,如果鼠标移动到新节点上),会发生什么情况。我的图表中可能有很多节点靠得很近,我开始认为可能淡出是不值得的。更新:你可以尝试在你的
onmouseover
的开头添加0延迟的“淡出”。据我所知,
dispatch
不是nvd3解决方案的核心。相反,每次在任何节点上出现鼠标移出事件时,它们也会在此处第78行调用
cleanup
方法来清除死掉的工具提示:。