是的,这是正常行为。一种解决方法可能是放弃 mouseleave/mouseenter 并将 mousemove 事件绑定到文档。从那里,获取页面上的鼠标指针位置以及动画元素的 offset()、with() 和 height()。如果从 mousemove 事件保存的最后一个点落在该区域内,则您的鼠标位于元素中。
每次动画更新时,您都需要对其进行测试,您可以使用animate step function进行测试。
例如
function myAnimateStepFunc(e,fx) {
var $e = $(fx.elem);
var p = $e.offset();
var isin = false;
if(lastx >= p.left && lasty >= p.top) {
isin =(lastx < p.left + $e.width() && lasty < p.top + $e.height());
}
...
这可能就足够了,尽管您可以将其扩展为然后触发自己针对动画元素的 mouseleave/mouseenter 事件。
请注意,您需要将 mousemove 绑定到整个页面,因为您需要更新鼠标在页面上移动的任何位置的 lastx 和 lasty 位置,而不仅仅是在动画的包含 div 内。