2009-07-30 3 views
2

こんにちは、私はこの質問に対する答えを見つけようとしています。私は、ロールオーバーを使用するjqueryを使用してナビゲーションバーを作成しようとしています。したがって、オン状態、オフ状態、クリックされた3つの異なるタブ/イメージの状態があります。Jqueryを使用したタブスタイルのナビゲーションバー

例: ホーム|サポート|約

私が持っているプロンプトは、すでにオン/クリックされている状態でクリック/オン状態になり、他のイメージ/タブをオフにしています。どんなことが起こっているかは、各タブがオンとオフを切り替えるのではなく、クリックされたときアクティブなままであることです。ここで

はコード

$(document).ready(function() { 


    // Navigation rollovers 
    $("#nav a").mouseover(function(){ 
     imgsrc = $(this).children("img").attr("src"); 
     matches = imgsrc.match(/_on/); 

     // don't do the rollover if state is already ON 
     if (!matches) { 
     imgsrcON = imgsrc.replace(/_off.gif$/ig,"_on.gif"); // strip off extension 
     $(this).children("img").attr("src", imgsrcON); 
     } 

    }); 

     $("#nav a").click(function(){ 
     imgsrc = $(this).children("img").attr("src"); 
     matchesclk = imgsrc.match(/_clk/); 


     if (!matchesclk) { 
     imgsrcClkON = imgsrc.replace(/_on.gif$/ig,"_clk.gif"); // strip off extension 
     $(this).children("img").attr("src", imgsrcClkON); 
     } 

    }); 

    $("#nav a").mouseout(function(){ 
     $(this).children("img").attr("src", imgsrc); 
    }); 


}); 

任意の助けをいただければ幸いです。私はjqueryを初めて使っており、実際にこれに触れる時間があります。

+0

ロールオーバー用にCSSを試しましたか? – Jason

+0

私は持っているが、イメージを使わずにデザイン要件を満たすことができない。 – Rob

+1

CSSでイメージリンクを使用することができます。 – Cyberherbalist

答えて

0

はあなたのために、この動作しますか?

<style> 
    .click 
    { 
     background-image: url(images/click.png); 
    } 

    .over 
    { 
     background-image: url(images/over.png); 
    } 
</style> 


$(document).ready(function() 
{ 
    $("#nav a").mouseover(function() 
    { 
     if($(this).attr("class") != "click") 
      $(this).addClass("over"); 
    }); 

    $("#nav a").click(function() 
    { 
     $("#nav a.click").removeClass("click"); 
     $(this).addClass("click"); 
    }); 

    $("#nav a").mouseout(function() 
    { 
     $(this).removeClass("over"); 
    }); 

}); 



<div id="nav"> 
<a>One</a> 
<a>Tw0</a> 
<a>Three</a> 
</div> 
+0

ありがとうございますが、その例のように、私は各画像に異なるクラスを持つ必要があります。私はjqueryルートに行っていたので、これは少し非効率なようです。私が掲示した例では、タブをクリックすると現在のタブのクリック状態がアクティブになり、以前にクリックされた他のタブは無効になるようにコードを修正したかっただけです。私は簡単にjavascriptでこれを行うことができましたが、私はjqueryでこれを複製することができませんでした。 – Rob

+0

クリック数以上で2つのクラスを持つのは非効率的だとは思わない。私には、matchとreplaceを使ってsrc属性を調べるのではなく、addclassとremoveclassを使う方がはるかにクリーンです。これは、元のサンプルで何をしようとしているのかを少なくして達成されます。 – tessa

1

代わりにCSSを試してみてください。ここではスライドドア技術に関する記事です:

http://www.alistapart.com/articles/slidingdoors/

EDITは、ここでは、(あなたのHTMLが有効であると仮定して)状態をクリックして適用できる方法は次のとおりです。

$(".yourLink").cick(function() { 
    $(".yourLink").removeClass("selected"); 
    $(this).addClass("selected"); 
}); 

そして、ちょうどあなたが定義しますあなたのCSSの "selected"クラス。

0

上記のタブの外観に背景画像+ CSSを併用すると、クラスを使用して異なるリンク状態を示し、そこでCSSを調整することをお勧めします。例えば:

<div id="nav"> 
    <a class="on" href="#">Link 1</a> 
    <a href="#">Link 1</a> 
    <a href="#">Link 1</a> 
    <a href="#">Link 1</a> 
    <a href="#">Link 1</a> 
</div> 

<style type="text/css"> 
    #nav a { color: blue; } 
    #nav a.on { color: red; } 
    #nav a.current { color: green; } 
</style> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#nav a').hover(
      function(){ $(this).addClass('on'); }, 
      function(){ $(this).removeClass('on'); } 
     ); 
    }); 
</script> 

関連する問題