自 Raphael 2.0.2 以来,Raphael 和 Internet Explorer(所有版本)中存在一个问题,其中对路径的各种操作(例如重置转换,.toFront()
或在悬停时.toBack()
调用)hover()
可能导致悬停循环无限循环和/或悬停到被错过。
虽然hover
大多数情况下在 IE 中对于 mouseout 都可以正常工作,但我发现有一些事情可能会使它出错,导致它 a) 像您描述的那样忽略 mouseouts 和 b) 递归触发 mouseover 事件,这样如果您放置一个控制台.log 在那里,IE 开发人员工具的控制台中断并变成灰色......有时似乎也阻止它识别鼠标悬停。
以下是我遇到的导致这种情况的事情:
- 重置转换,这将导致元素从鼠标下方移动,然后重新应用它,将元素放回光标下方。非 IE 就像什么都没发生一样继续运行,并且工作正常,IE 像上面描述的那样吓坏了。
- .toFront() 和 .toBack() - 非 IE 将移动的元素识别为相同 XY 位置的相同元素,如上所述,IE 会崩溃。
在这个jsfiddle中有一些观察和演示(阅读并取消注释各种评论)。
一个好的解决方法是使用某种标志,例如 'path.data('hoverIn', true); on mouse in and 'path.data( 'hoverIn', false );
在鼠标移出时,然后将任何或有问题的转换包装.toFront()
在一个检查中,!path.data( 'hoverIn' )
以便它只能发生一次,直到鼠标移出发生。或者,将最近悬停的路径的引用存储在 或之后某处toFront()
,然后不要toFront()
或任何如果该路径也是最近悬停的路径。