2011-06-27 11 views
-1

私はドロップダウンメニューを持っていて、私はmouseoutに遅延を加えたいと思っています。だから、メニュー上にマウスを置くとドロップダウンが表示されますが、メニューからマウスを動かすと少し遅れが出ます。このメニューのマウスオーバーで遅延を設定するにはどうすればよいですか?

これで一日中検索しましたが、何も見つかりませんでした。使用することを知っていないhoverIntentプラグインが必要です。

は、ここに私のコードです:

HTML:

<ul id='nav'> 
    <li><a href='#'>Top level 1</a></li> 
    <li><a href='#'>Top level 2</a> 
    <ul> 
     <li><a href='#'>Sub 2 - 1</a></li> 
     <li> 
     <a href='#'>Sub 2 - 2</a> 
     <ul> 
      <li> 
      <a href='#'>Sub 2 - 2 - 1</a> 
      <ul> 
       <li><a href='#'>Sub 2 - 2 - 1 - 1</a></li> 
       <li><a href='#'>Sub 2 - 2 - 1 - 2</a></li> 
       <li><a href='#'>Sub 2 - 2 - 1 - 3</a></li> 
       <li><a href='#'>Sub 2 - 2 - 1 - 4</a></li> 
      </ul> 
      </li> 
      <li><a href='#'>Sub 2 - 2 - 2</a></li> 
      <li> 
      <a href='#'>Sub 2 - 2 - 3</a> 
      <ul> 
       <li><a href='#'>Sub 2 - 2 - 3 - 1</a></li> 
       <li><a href='#'>Sub 2 - 2 - 3 - 2</a></li> 
       <li><a href='#'>Sub 2 - 2 - 3 - 3</a></li> 
       <li><a href='#'>Sub 2 - 2 - 3 - 4</a></li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li><a href='#'>Sub 2 - 3</a></li> 
    </ul> 
    </li> 
</ul> 

のjQuery:

$(document).ready(function(){     
    $("#nav ul ").css({display: "none"}); 
    $("#nav li").hover(
     function() 
      { 
       $(this).find('ul:first').css({visibility: "visible",display: "none"}).slideToggle(); 
      }, 
     function(){ 
      $(this).find('ul:first').css({visibility: "hidden"}); 
     } 
); 

私はjavascriptの:)

感謝のために大きなnoobのだと、仮定して下さい!

EDIT:

私はすべてのソリューションを試してみましたが、どれもパトリシアから解決策を期待働きました。今では私があなたが見ることができるように奇妙な動作をするhttp://pastehtml.com/view/aykmhy9ae.html

+0

私は、以下の完全に有効な答えをたくさん見ました。誰もが同じコードを見て遊ぶことができるように[JSfiddle](http://jsfiddle.net/)を投稿するべきです。 – Sparky

答えて

0

徐々にフェードアウトが遅延よりも優れていることを示唆することはできますか?

displayを設定
hide(), show(), toggle() 
fadeIn(), fadeOut(), fadeToggle() 
slideIn(), slideOut(), slideToggle() 

:あなたはjQueryのを使用して要素を表示/非表示をしているとき、あなただけの次を使用必要があります。その場合には、代わりにあなたのvisibility: "hidden"コード

$(this).find('ul:first').fadeOut('slow'); 

小さな先端の次を試してみてくださいCSSのプロパティは無駄です。

0

あなたはこのような何かしたいと思います:1000あなたはこれが5秒(5000ミリ秒)遅延を加えるマウスアウトアクション

+0

遅延がありますが、どういうわけか不思議です:) http://pastehtml.com/view/aykmhy9ae.html – mailinator

+0

に表示されるように、私は奇妙な動作をします。あなたのCSSホバーの動作のいくつかは干渉していると思います。私は完全には分かりません。 – Patricia

+0

私はCSSを牛として探しています:D Imは別のメニュースクリプトに切り替えることを検討しています..あなたは何か提案がありますか?私の要件は、JSなしでもIE7で動作することです。また、軽量でなければなりません:) – mailinator

1

の遅延を持ちたいミリ秒数です

 $("#nav li").hoverIntent({ 
      over: function(e){ 
       $(this).find('ul:first').css({visibility: "visible",display: "none"}).slideToggle(); 

      }, 
      out:function(e){ 
       $(this).find('ul:first').css({visibility: "hidden"}); 

      }, 
      timeout: 1000 
     }); 

を...

$(this).find('ul:first').delay(5000).css({visibility: "hidden"}); 

EDIT:

Read more here.

0

あなただけの発射から機能を遅らせ、そしてまた、彼らは離れて置く場合、タイムアウトがクリアされていることを確認するためのsetTimeoutを使用する必要があります。これは1000msのタイムアウトを行います。

$(document).ready(function(){     
    $("#nav ul ").css({display: "none"}); 
    var onHoverTimeoutFunction = null; 
    $("#nav li").hover(
     function() 
      { 
       onHoverTimeoutFunction = setTimeout(function() {$(this).find('ul:first').css({visibility: "visible",display: "none"}).slideToggle();},1000); 
      }, 
     function(){ 
      clearTimeout(onHoverTimeoutFunction); 
      $(this).find('ul:first').css({visibility: "hidden"}); 
     } 
); 
0
$(function() { 
     var timer = null; 
     $("li", "#nav").hover(
      function() { 
       var element = $(this); 
       timer = window.setTimeout(function() { element.find("ul:first").slideToggle(); }, 500); 
      }, 
      function() { window.clearTimeout(timer); $(this).find('ul:first').slideToggle(); } 
     ); 

      $("ul", "#nav").css("display", "none"); 
    }); 
関連する問題