2012-06-29 5 views
24

ここでは、ボタンをスライドさせるために、ホバー上のdivに適用したjQueryスライド機能を示します。マウスを2秒以上押し続けると、それ以外は表示されませんか?

誰かがその中を出入りするたびに、上下に揺れ続けます。

もし私がそれに1〜2秒の遅延タイマーを置くと、それは理にかなっています。

ユーザーがdivに2〜3秒以上いる場合にのみスライドを実行するように関数を変更するにはどうすればよいですか?

あなたはどちらか早い方、マウスオーバーでタイマーを設定し、スライドが有効かマウスアウトにされたときのいずれか、それをクリアする必要があり
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js "></script> 
<script type="text/javascript"> 

$("#NewsStrip").hover(
function() { 
    $("#SeeAllEvents").slideDown('slow'); }, 
function() { 
    $("#SeeAllEvents").slideUp('slow'); 
}); 

</script> 
+0

の正確な複製[ jQuery - どのように待つために?hover()を教える?](http://stackoverflow.com/questions/1089246/jquery-how-to-tell-hover-to-wait) –

+0

@TJCrowder OPはそれを正確に要求していません。 –

+0

@ThomasClayson:明らかに彼らはそうです。同じ質問、同じ受け入れられた答え。 –

答えて

55

var timeoutId; 
$("#NewsStrip").hover(function() { 
    if (!timeoutId) { 
     timeoutId = window.setTimeout(function() { 
      timeoutId = null; // EDIT: added this line 
      $("#SeeAllEvents").slideDown('slow'); 
     }, 2000); 
    } 
}, 
function() { 
    if (timeoutId) { 
     window.clearTimeout(timeoutId); 
     timeoutId = null; 
    } 
    else { 
     $("#SeeAllEvents").slideUp('slow'); 
    } 
}); 

See it in action.

+0

@xDazzありがとうございましたjonとxDazz。スライドは美しく動作しますが、マウスの上に戻ってスライドしませんか?行方不明か間違ったことをしていますか? – user1266515

+0

2番目の関数の 'if'' else'ブロックを削除してみてください。あなたは本当にそれらを必要としません。そのようなメソッドを呼び出すと、 'if else'を削除しても有害な影響はありません。そして、おそらくなぜそれが再び上がってこないのか。 :) –

+0

@ThomasClaysonさて、今度は一度スライドしてから一度上がってからinactive.Weirdになります。 – user1266515

3
var time_id; 

$("#NewsStrip").hover(
function() { 
    if (time_id) { 
     clearTimeout(time_id); 
    } 
    time_id = setTimeout(function() { 
     $("#SeeAllEvents").stop(true, true).slideDown('slow'); 
    }, 2000); 
}, function() { 
    if (time_id) { 
     clearTimeout(time_id); 
    } 
    time_id = setTimeout(function() { 
     $("#SeeAllEvents").stop(true, true).slideUp('slow'); 
    }, 2000); 
}); 
関連する問題