2011-10-17 19 views
2

divにカーソルを合わせると(id = div-CONがあると仮定して)、div-CON内にいる間に、絶対配置された別のdivがマウスでポップアップして表示されます。マウスがdiv-CONを離れると、フローティングdivが消えます。マウスイベントを無視する方法はありますか?

ブラウザが遅くなったり遅れたりすると、フローティングdivがすぐに位置を更新しないため、マウスがフローティングdivに入ってから離れる場合があります。この瞬間、マウスはdiv-CONを出て再び入るので、フローティングdivは本質的に点滅する。

これについては、イベントを無視またはキャンセルする方法があるかどうか疑問に思っていました。この場合、マウスがフローティングdivに入ると、mouseleaveイベントはdiv-CONでトリガーされません。

相続人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イベントを引き継ぐことなく、それを行うの少ない集中的な方法を期待していました。 –

関連する問題