2011-01-28 1 views
5

hoverintentプラグインは、必要と反対です。 .popupは.triggerによってトリガされていますが、私が立ち去ったときに.popupを数秒間フェードアウトしないようにしたいのですが、私が立ち去った後に再び立ち上げたら、 .popupを開いたままにしておきます。Jquery:mouseleaveに遅延を追加する方法。故意に要素を誤って横切っても、まだ開いたままになっています。

どのように私はこれを行うだろう知っていますか?

これは動作しませんが、それはアイデアだった:あなたはjqueryのhoverintentプラグインを使用して試みることができる

$('.trigger').hover(function(){ 
     $('.popup').fadeIn(600) 
    }, function() { 
     $('.popup').delay(2000, function(){ 
      if ($(this).blur() = true) { 
       $('.popup').fadeOut(600) 
      } 
     }); 
    }) 

答えて

10

jQuery HoverIntent pluginはあなたの探しているものです。

timeoutプロパティは、out関数が呼び出される前にマウスがその領域からOUTする必要がある時間を設定します。ホバー目的のWebサイトから

引用:

タイムアウト: 「アウト」機能が呼び出される前に、ミリ秒単位での単純な遅延、。タイムアウトが経過する前にユーザーがマウスの上にマウスを戻すと、 "out"関数は呼び出されません( "over"関数が呼び出されることもありません)。これは、一時的に(そして意図せず)ターゲット要素からユーザーを引き離して、返す時間を与えてしまう、ぎこちない/人間のマウスの軌道から守るためです。デフォルトのタイムアウト:また、調整することができます

:0

...

$('.trigger').hoverIntent({ 
    over: startHover, 
    out: endHover, 
    timeout: 2000 
}); 

を、それを設定するには次にoverout

function startHover(e){ 
    //your logic here 
    $('.popup').fadeIn(600) 
} 

function endHover(){ 
    //your logic here 
    $('.popup').fadeOut(600) 
} 

EDITを処理するための関数を定義しますinterval startHover関数の時間を増減するプロパティデフォルトは100ミリ秒に設定されています...あなたが好きならマウスがトリガーエリアに入るとすぐにポップアップを消すためにゼロに設定することができます。

+0

すべてを微調整する設定があります。 'timeout'プロパティは、 'out'関数が – stephen776

+0

と呼ばれる前に遅延を設定します。したがって、 'startHover'関数はポップアップを表示し、' endhover'関数はそれを削除します。タイムアウトは、エリアのマウスアウト時にend関数が呼び出されるまでに遅延を設定します...あなたの望みの効果を達成する – stephen776

+0

fadeIn/fadeOutロジックを組み込むように編集しました – stephen776

0

この私の作品:

$(".triger").mouseenter(function() { 
    $(this).find("popup").fadeIn(); 
}).mouseleave(function() { 
    $(this).find("popup").delay(200).fadeOut(); 
}); 
+0

これはうまくいきません。遅延時間内にマウスを.triger上に置くと、それはまだとにかくfadeOutになります...ちょうど200の遅延で。 – thorinkor

3

はここで追加プラグインなしで、それを行うための最も簡単な方法です:

$('.trigger').hover(function() { 
    clearTimeout(this.timer); 
    $('.popup').fadeIn(600); 
}, function() { 
    this.timer = setTimeout(function() { 
     if ($(this).blur() = true) { // off topic: you should to check this condition ;) 
      $('.popup').fadeOut(600); 
     } 
    }, 2000); 
}); 

のsetTimeout()とてclearTimeout()は、HTML DOMウィンドウのネイティブJS関数です永遠からオブジェクト。

+0

誰かのために、私がそうしたようにこれをつまずかせる:この[非常に似た解決策]があります(http://stackoverflow.com/questions/1273566/how-do-i-check-if-the-mouse-is私の方が良いと思っていたのは、jquery-over-an-element-1670561#1670561です。たとえば、 'if($(this).blur()= true)'の条件は完全に間違っています。 – sashn