2011-10-17 50 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事件的情況下實現它的密集方式。 –

相關問題