Javascript 单击之前发生D3鼠标移出事件

Javascript 单击之前发生D3鼠标移出事件,javascript,d3.js,Javascript,D3.js,我正在将以下D3事件注册到SVG元素 解释这是什么,考虑到当我悬停在一个特定的区域时,我呈现一个圆形的元素,伴随着鼠标移动到那个区域。 当我将移出该区域时,圆圈将隐藏,当我向后悬停时,它将再次可见目标是单击该圆圈执行功能。这就是事情不起作用的地方 mouseout事件总是在单击之前触发,并且由于对象被mouseout隐藏,因此无法触发单击事件 d3.select(my_object.my_circle) .data([{ "my_object": this }])

我正在将以下D3事件注册到SVG元素

解释这是什么,考虑到当我悬停在一个特定的区域时,我呈现一个圆形的元素,伴随着鼠标移动到那个区域。 当我将移出该区域时,圆圈将隐藏,当我向后悬停时,它将再次可见目标是单击该圆圈执行功能。这就是事情不起作用的地方

mouseout事件总是在单击之前触发,并且由于对象被mouseout隐藏,因此无法触发单击事件

  d3.select(my_object.my_circle)
        .data([{ "my_object": this }])
        .call(FUNC_DRAG)
        .on("mouseover", FUNC_OVER)
        .on("mousemove", FUNC_MOVE)
        .on("mouseout" , FUNC_OUT)
        .on("click"    , FUNC_CLICK);
以下是处理功能

当我在我的圆圈上单击时,mouseout事件被触发,FUNC\u OUT将隐藏我单击的元素,取消触发FUNC\u单击的click事件

function FUNC_OVER(d) {
 d3.select(my_object.my_circle).style("visibility", "visible");
}

function FUNC_OUT(d) {
 console.log("mouseout");
 d3.select(my_object.my_circle).style("visibility", "hidden");
}

function FUNC_CLICK(d) {
 // this never executes;
 console.log("click");
}

理想情况下,我需要知道如何在鼠标移出之前强制执行单击事件。

考虑两个因素:

  • A:底层元素
  • B:一个“光标元素”,它悬停在元素“a”上,只要鼠标也在元素“a”的顶部,它就应该是可见的,并跟随鼠标的位置
通常,每当元素“B”可见时(只要鼠标悬停在元素“A”上,它将触发“A”上的鼠标移出事件,并切断“A”跟踪移动的能力)


要解决上述问题,请将光标元素“B”设置为以下样式:“指针事件:VisibleStrope”。此选项确保“B”不会调用其自身的事件,除非达到其笔划/边框,因为“A”控制“B”,所以情况永远不会如此总是跟随鼠标位置。

你的CSS是什么样子的?你有
指针事件:所有;
圆圈上吗?
对我来说,如果你这样做就可以了…我没有使用指针事件。谢谢你的建议。它确实有效,但不幸的是,元素在隐藏时是可以单击的,在那种情况下我不能知道什么时候它不应该被点击(它可能是隐藏的,因为我移出了该区域,但会导致它仍然可以单击。但似乎有一些方法可以使用这种方法。好消息现在对我来说最有效的方法是避免在mouseout事件中立即隐藏对象,而是使用setTimeout(F,1000,circleObjectAndElse)这允许单击事件在隐藏之前触发。老实说,我看不到你描述的行为。如果你单击圆圈,怎么会有鼠标出?如果你已经有鼠标出,怎么能单击?根据你发布的代码,这对我没有意义。我的错。我有几个问题:-正在放置的元素光标over一旦可见,就切断了底层事件并导致底层元素被鼠标移出——为了避免这种问题,我将样式设置为“指针事件:VisibleStrope”这使我能够在光标元素位于其正上方时保持对下方元素的控制。由于光标元素是一个圆,VisibleStrope指针事件将确保在我到达其笔划(边框)之前不会启动任何事件,因为光标元素跟随光标移动,所以情况永远不会如此。