1

私は次のコードを持っています。

$("#login").mouseout(function() {
    setTimeout(function() {
        $("#login").animate({
            height: "toggle"
        })
    }, 500);
});

マウスが#loginを離れると、500ミリ秒待機してから、要素を非表示にします。私が欲しいのは、マウスが要素を離れて500ミリ秒以内にそこに戻った場合、要素を非表示にしないことです。それ以外の場合、マウスが要素の「範囲」から500ミリ秒以上外れていると、アニメーション関数が呼び出され、要素が非表示になります。

このコードをそこに置くと

$("#login").mouseover(function() {
    clearTimeout(t);
});

要素を閉じるときにマウスを合わせると、アニメーションが完了した後、要素が再び飛び出します。

4

2 に答える 2

2

の変数を宣言してsetTimeout、次を使用できるようにしますclearTimeout:(
さらに、「再びポップアップする」問題を解決しました)

$("#login")
    .mouseout(function() {
        window.t = setTimeout(function() {
            $("#login").animate({
                height: "toggle"
            })
        }, 500);
    })
    .mouseover(function(){
        if(window.t){
            clearTimeout(window.t);
            window.t = undefined;
        }else{
            //Do your menu popup thing here
        }
    });
于 2012-06-03T18:48:48.190 に答える
1

mouseenterまたはmouseoverイベントでタイムアウトをクリアできます。

var t;
$("#login").mouseenter(function() {
    clearTimeout(t);
});
$("#login").mouseout(function() {
    t = setTimeout(function() {
        $("#login").animate({
            height: "toggle"
        })
    }, 500);
});
于 2012-06-03T18:49:44.150 に答える