0

まず、私の悪い英語をお詫びしたいと思います。このコード ブロックで:

    $("#div1").mouseleave(function(){
           $("#div2").mouseenter(function(){
              //To prevent hiding div2 
           });
           $("#div2").hide();
    });

$("#div2").hide();ご覧のとおり、カーソルがdiv2に入った場合に実行を防ぎたいです。

ありがとう。

4

3 に答える 3

1

私があなたの質問を受け取った場合、div1 を離れるときにマウスがすぐに div2 に入るか、div2 に留まり続ける場合、div2 を非表示にしたくありません。

次に、これを行うことができます:

// returns true if the event is over the jQuery object o
function eventIsOver(event, o) {
    if ((!o) || o==null) return false;
    var pos = o.offset();
    var ex = event.pageX;
    var ey = event.pageY;
    return (
        ex>=pos.left
        && ex<=pos.left+o.width()
        && ey>=pos.top
        && ey<pos.top+o.height()
    );
};

$("#div1").mouseleave(function(e){
           if (eventIsOver(e, $("#div2")) return;
           $("#div2").hide();
});

正確なケースによっては、別のことをしなければならない場合があることに注意してください。たとえば、2 つの div の間にギャップがあるかどうか (遅延に対処する必要があります)、または一方が他方の上にある場合は正確ではありませんでした。

于 2013-06-25T10:50:26.673 に答える
0

考えられる解決策の 1 つは、 の非表示divを 100 ミリ秒などの数ミリ秒遅らせることです。div2

var div2HideTimer;
$("#div1").mouseleave(function(){
    div2HideTimer = setTimeout(function(){
        $("#div2").hide();
    }, 100)
});
$("#div2").mouseenter(function(){
    clearTimeout(div2HideTimer)
});
于 2013-06-25T10:53:16.720 に答える