我有一个围绕着D3图表的Angular指令。我创建了一个工具提示,并在父元素的'mouseover'和'mouseout'中处理其可见性,还在'mousemove'中处理工具提示的位置,使其随着鼠标移动。
工具提示是绝对定位的。
问题是,当我移动鼠标指针足够快时,即使鼠标指针仍在指定区域内,父级的'mouseout'事件也会被调用。我记录并发现,这是因为有时鼠标指针(当移动速度较快时,工具提示位置没有更新得那么快)悬停在绝对定位而不是属于父级的工具提示上。
这会导致一些困难,因为在父元素的'mouseout'上,我也正在更改另一个元素的可见性,因此它在快速移动鼠标时会产生波动/闪烁的效果。
我不确定这是否是预期行为,或者它是否特定于D3或Angular。
工具提示是绝对定位的。
问题是,当我移动鼠标指针足够快时,即使鼠标指针仍在指定区域内,父级的'mouseout'事件也会被调用。我记录并发现,这是因为有时鼠标指针(当移动速度较快时,工具提示位置没有更新得那么快)悬停在绝对定位而不是属于父级的工具提示上。
这会导致一些困难,因为在父元素的'mouseout'上,我也正在更改另一个元素的可见性,因此它在快速移动鼠标时会产生波动/闪烁的效果。
我不确定这是否是预期行为,或者它是否特定于D3或Angular。
这里有一个JSFiddle链接:http://jsfiddle.net/6bQA8/5/
初始状态下,文本和折线
会被显示,当鼠标悬停在任何一个扇形区域上时,它们会被隐藏
。
当鼠标悬停在任何一个扇形区域上时,你将会得到一个提示框
,如果你移动你的鼠标
,提示框
也会移动,如果你移动鼠标足够快,检查控制台
,你会看到"tooltip hovered"
,此外在UI上你会看到闪烁的文本和折线
,它们应该在从扇形区域mouseout
后仍然是可见的
。
在理想情况下,“tooltip hovered”永远不应该被调用,因为提示框
总是随着鼠标
更新,并且不在指针
下面。
附注:解决问题的一种方法是在工具提示中添加pointer-events:none
或增加工具提示与指针的offset
,但我更想知道为什么会发生这种情况,以及这是否是框架、浏览器或代码中的某些限制。此外,由于我稍后要重新使用相同的工具提示对象进行单击操作,因此那时我将不得不删除pointer-events:none
,而增加offset
在UI上看起来并不好。此外,这两种方法都是实际上是hack而不是正确的解决方案。
code
来一起工作,最好是一个 fiddle。另外,如果你达到了你的目标,你打算如何关闭这个提示框? - Ivan Modric