2009-07-30 15 views
2

Hallo Ich habe versucht, eine Antwort auf diese Frage zu finden. Ich versuche, eine Navigationsleiste mit jQuery zu erstellen, die Rollover verwendet. Es gibt also einen Status "Ein", "Aus", "Klick" für drei verschiedene Tabs/Bilder.Tab style nav bar mit Jquery

Beispiel: Home | Unterstützung | Über

Das Problem, das ich habe, ist, den angeklickten/eingeschalteten Zustand zu erhalten, um das andere Bild/den anderen Tab auszuschalten, wenn es bereits auf/angeklickt war. Was weiter hapert, ist, dass jede Registerkarte aktiv bleibt, wenn sie geklickt wird, anstatt sie ein- und auszuschalten.

Hier ist der Code

$(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); 
    }); 


}); 

Jede Hilfe würde geschätzt. Ich bin neu in JQuery und ich habe wirklich ein bisschen Zeit damit.

+0

Haben Sie CSS für Ihre Rollover ausprobiert? – Jason

+0

habe ich aber ich kann die Designanforderungen nicht ohne Bilder erfüllen. – Rob

+1

Sie können Bildlinks in CSS verwenden, glaube ich. – Cyberherbalist

Antwort

0

Wird diese Arbeit für Sie?

<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

Danke, aber es sieht so aus, als müsste ich in diesem Beispiel eine andere Klasse für jedes Bild haben. Das scheint ein wenig ineffizient, weshalb ich die JQuery-Route ging. In dem Beispiel, das ich gepostet habe, wollte ich nur den Code korrigieren, so dass beim Klicken auf einen Tab der aktuelle Tabs-Klickstatus aktiviert wird und alle anderen Tabs deaktiviert werden, auf die zuvor geklickt wurde. Ich konnte dies in Javascript leicht tun, aber ich konnte dies in jQuery nicht replizieren. – Rob

+0

Ich glaube nicht, dass es ineffizient ist, zwei Klassen für Click und Over zu haben. Für mich ist es viel sauberer, addclass und removeclass zu verwenden, anstatt src-Attribute mit match und replace zu überprüfen. Dies erreicht mit weniger Code, was Sie in Ihrer ursprünglichen Probe zu tun versuchen. – tessa

1

Versuchen Sie CSS stattdessen. Hier ist ein Artikel über die Schiebetüren Technik:

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

EDIT hier, wie Sie Zustand klicken anwenden könnten (Ihre HTML Annahme gültig ist):

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

Und so stellen Sie sicher, dass Sie die definieren "ausgewählte" Klasse in Ihrem CSS.

0

In Verbindung mit der Verwendung von Hintergrundbildern + CSS für das Aussehen der Tabs (wie oben erwähnt), schlage ich vor, dass Sie Ihre verschiedenen Link-Zustände mit Klassen bezeichnen und dann Ihr CSS von dort anpassen. Z.B .:

<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> 

Etc.