我正在将以下D3事件注册到SVG元素。
为了解释这是什么,请考虑当我将鼠标悬停在特定区域时,我会在该区域上呈现一个随着鼠标移动而显示的圆形元素。
当我移动该区域的 out 时,圆圈会被隐藏,当我向后悬停时,它会再次显示。 目标是点击该圈子以执行功能 。这是事情不起作用的地方。
鼠标输出事件总是在点击之前被触发,并且由于鼠标输出隐藏了对象,因此错过触发点击事件
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);
以下是处理功能。
当我在my_circle上点击时,会触发 mouseout 事件FUNC_OUT会隐藏我点击的元素,取消会有的点击事件触发了FUNC_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");
}
理想情况下,我需要知道如何在mouseout之前强制执行点击事件。
答案 0 :(得分:0)
考虑两个要素:
通常,每次元素“B”都可见时(只要鼠标悬停元素“A”,它就会触发“A”上的mouseout事件并削减“A”跟踪移动的能力。
要解决上述问题,请使用以下样式设置cursor-element“B”:“ pointer-events:visibleStroke ”。此选项确保“B”不会调用自己的事件,除非达到其笔划/边框,这是绝对不会的,因为“A”控制“B”始终跟随鼠标位置。