2011-10-17 51 views
2

当我将鼠标悬停在div上时(假设它具有id = div-CON),我有另一个div,它位于绝对位置,弹出并且在div-CON内跟随鼠标。当鼠标离开div-CON时,浮动div将消失。有没有办法忽略鼠标事件?

现在,有些情况下,如果浏览器缓慢或滞后,浮动div不会更新其位置足够快,使鼠标进入浮动div一瞬间然后离开它。在这瞬间,鼠标离开div-CON并再次进入,所以浮动div基本上闪烁。

对此,我想知道是否有办法忽略或取消事件,以便在这种情况下,当鼠标进入浮动div时,div-CON上不会触发mouseleave事件。

继承人的jsfiddle:http://jsfiddle.net/vuxcR/

回答

2

当光标离开浮动元素时,可以设置超时(延迟)。当它再次徘徊时,超时会清除。

请参阅this answer为概念。

var timer; 
function addFollower($element, event_mouseEnter, event_mouseMove, event_mouseLeave){ 
    clearTimeout(timer); 
    $element.mouseleave(function(){ 
     timer = setTimeout(event_mouseLeave, 300); //Delay of 300ms 
    }) 
    $element.mouseenter(function(){ 
     clearTimeout(timer); //Clear any delay 

     event_mouseEnter(); 
    }); 
    $element.mousemove(event_mouseMove) 
} 
addFollower($("#div-CON"), 
    function(ev){ 
     //Mouse-enter 
    }, 
    function(ev){ 
     //Mouse move 
    }, 
    function(){ 
     //Mouse-leave 
    } 
); 
+0

谢谢。我会等待看看是否有其他解决方案。但我认为你的方式将是唯一的解决方案 –

+0

如果300ms的延迟太小,增加延迟。如果延迟低于1-2秒是不够的,你应该考虑修改你的代码,因为即使是慢速浏览器也不需要1-2秒来渲染一个元素。 –

1

你可以跟踪鼠标的精确位置,并检查其与DIV-CON矩形。在鼠标离开这个矩形之前不要触发取消操作。

+0

我有这样的想法,但我希望在不接管mousemove事件的情况下实现它的密集方式。 –

相关问题