jQuery MagicLine Navigation

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Diese „gleitenden“ Navigationsbalken gibt es schon eine Weile, ich dachte mir, ich versuche es selbst, da sich kürzlich die Gelegenheit bot. Es stellt sich heraus, dass es wirklich verdammt einfach ist. Ich habe zwei Beispiele dafür zusammengestellt.

Die Idee

Die Idee ist, eine Art Hervorhebung (einen Hintergrund oder eine Unterstreichung) zu haben, die Ihnen folgt, wenn Sie mit der Maus über die verschiedenen Links in der Navigation fahren. Dies geschieht mit jQuery und seinen Animationsfähigkeiten. Daher wird die „Magic Line“ nur über JavaScript hinzugefügt. Sobald sie zur Liste hinzugefügt und gestylt ist, ermittelt sie beim Überfahren der verschiedenen Links die linke Position und die Breite und animiert sich entsprechend.

HTML

Typische Liste hier… Sie hat die Klasse „group“, da sie eine horizontale Reihe sein wird und die Clearfix benötigt, um Höhe zu haben. Die ID ist für das JavaScript, um sie anzusprechen.

<nav class="nav-wrap">
  <ul class="group" id="example-one">
    <li class="current_page_item"><a href="#">Home</a></li>
    <li><a href="#">Buy Tickets</a></li>
    <li><a href="#">Group Sales</a></li>
    <li><a href="#">Reviews</a></li>
    <li><a href="#">The Show</a></li>
    <li><a href="#">Videos</a></li>
    <li><a href="#">Photos</a></li>
    <li><a href="#">Magic Shop</a></li>
  </ul>
</nav>

Beachten Sie die .nav-wrap div drumherum. Diese wird wegen des Stylings verwendet; die Balken gehen über die volle Bildschirmbreite, aber die Navigation ist darin zentriert. Dieses Zentrieren wirft ein Problem auf, wenn wir mit dem JavaScript beginnen.

CSS

Machen Sie die üblichen Inline-Listenelemente mit nach links gefloateten Ankern, um die Liste horizontal zu gestalten und Treppenbildung zu vermeiden. Die Magic Line ist absolut positioniert unter dem Balken, damit sie kein Zittern verursacht (Maus über einen Link, animiert darüber, Maus ist jetzt auf der Magic Line, nicht mehr auf dem Link, animiert zurück, usw.). Alles andere ist rein stilistisch.

.nav-wrap { margin: 50px auto;  background-color: rgba(0, 0, 0, 0.6); border-top: 2px solid white; border-bottom: 2px solid white; }
#example-one { margin: 0 auto; list-style: none; position: relative; width: 960px; }
#example-one li { display: inline; }
#example-one li a { color: #bbb; font-size: 14px; display: block; float: left; padding: 6px 10px 4px 10px; text-decoration: none; text-transform: uppercase; }
#example-one li a:hover { color: white; }
#magic-line { position: absolute; bottom: -2px; left: 0; width: 100px; height: 2px; background: #fe4902; }

jQuery JavaScript

  1. Wenn der DOM bereit ist…
  2. Einrichtung von Variablen, einschließlich des aktuellen linken Offsets der Navigation
  3. Einrichtung einer Resize-Funktion am Fenster, um diesen Offset zurückzusetzen, falls er sich ändert (wegen der Zentrierung)
  4. Hinzufügen der Magic Line zur Navigation
  5. Einrichtung von Position und Breite der Magic Line für das aktuelle Seiten-Element
  6. Speichern Sie auch die ursprüngliche Breite und Position als Daten, damit sie zum Zurückanimieren verwendet werden können
  7. Beim Hovern wird die neue Breite und die neue linke Position berechnet und dorthin animiert
  8. Im Hover-Callback (Mouse Out) animiert es zurück zum Original

Aktualisiert, dank kluger Kommentare von Daniel und Nora Brown unten.

$(function() {

    var $el, leftPos, newWidth,
        $mainNav = $("#example-one");
    
    $mainNav.append("<li id='magic-line'></li>");
    var $magicLine = $("#magic-line");
    
    $magicLine
        .width($(".current_page_item").width())
        .css("left", $(".current_page_item a").position().left)
        .data("origLeft", $magicLine.position().left)
        .data("origWidth", $magicLine.width());
        
    $("#example-one li a").hover(function() {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.parent().width();
        $magicLine.stop().animate({
            left: leftPos,
            width: newWidth
        });
    }, function() {
        $magicLine.stop().animate({
            left: $magicLine.data("origLeft"),
            width: $magicLine.data("origWidth")
        });    
    });
});

Demo

Sehen Sie den Pen
jQuery MagicLine
von Chris Coyier (@chriscoyier)
auf CodePen.

Probleme

Opera ist damit seltsam. Es macht die ursprüngliche Breite der Magic Line zur vollen Breite des Navigationsbalkens und kürzt sie von rechts bei Hover. Ich konnte es nicht herausfinden. Wenn Sie es können, lassen Sie es mich wissen, ich werde diesen Artikel und die Demos aktualisieren.

Alternative Version

Sehen Sie sich den Demo-Link unten für eine alternative Version an, die einen Hintergrund anstelle einer Linie verwendet und Farbe sowie Position und Breite animiert. Grundsätzlich dasselbe, außer dass die CSS leicht unterschiedlich ist und das JavaScript die Farbe des neuen Listenelements aus einem rel-Attribut im HTML zieht.

Farbanimationen in jQuery erfordern das color plugin. Ich habe gerade darüber gejammert, dass es mit RGBa-Farben nicht funktioniert, und jemand hat mir einen Patch geschickt, der das tut und der im Download enthalten ist. Es tut mir wirklich leid, aber ich erinnere mich nicht mehr an seinen Namen! Melden Sie sich, wenn Sie es waren, und ich werde dies aktualisieren und den Patch Ihnen gutschreiben.

Alles Ihres

Wie immer, fühlen Sie sich frei, damit zu tun, was Sie wollen. Vorzugsweise verwenden Sie es in Firmenprojekten und verdienen Sie Schubkarren voller Geld.

Aktualisiert am 27. April 2011 zur besseren Kompatibilität mit IE 6-10
  • Matthias
    Permalink zu Kommentar#

    Das ist so einfach und süß. Danke fürs Teilen! :)

  • Paul
    Permalink zu Kommentar#

    Können Sie es so einrichten, dass es auf dem zuletzt angeklickten Element bleibt? Die obige Methode funktioniert bei mir nicht.

  • Federico
    Permalink zu Kommentar#

    Hallo, ich habe dieses großartige Skript mit einem vertikalen Untermenü kombiniert…

    http://www.castellolarocchetta.it/test/

    Gibt es eine Möglichkeit, die Magic Line (ich habe sie in ein kleines Logo geändert) an der ursprünglichen Position (current_page_item) zu halten, anstatt nach links in der Navbar zu gehen, wenn man auf einen Untermenü-Link klickt? Vielen Dank für Ihre großartige Arbeit.

  • Slatron
    Permalink zu Kommentar#

    Es sieht so aus, als ob das zweite Beispiel für keine IE-Version funktioniert. Ich habe den Code noch nicht durchgesehen – aber haben das schon andere bemerkt?

    • John Pisello
      Permalink zu Kommentar#

      Es gibt ein Problem im Code `jquery.color-RGBa-patch.js`. Es versucht, einen `rgba()`-Wert, den IE nicht erkennt, dem Hintergrund des Magic Line-Elements zuzuweisen.

    • Chris Coyier
      Permalink zu Kommentar#

      Ja, ich bin sicher, dass es das ist. Stellen Sie einfach sicher, dass keine der Farbwerte RGBa sind, und Sie sollten in Ordnung sein.

    • Slatron
      Permalink zu Kommentar#

      Ich habe es gerade überprüft, und es ist bereits behoben. Gut, dass ich zurückgeschaut habe. Danke für die Hilfe!

  • Sonu
    Permalink zu Kommentar#

    Hallo Chris, Ihre Tutorials sind alle fantastisch. Ich habe durch das Ansehen und Lesen all Ihrer Artikel viel über CSS und jQuery gelernt. Sie haben mir wirklich sehr geholfen.

    Währenddessen habe ich eine Frage. Eigentlich möchte ich wissen, wie Sie dieses Kommentarsystem erstellt haben?

    Ich meine, jeder kann auch auf andere antworten. Während die Kommentarbox eine sehr nette Funktion hat, zeigt sie an, was in die Box eingegeben werden soll, und wenn wir mit der Maus darüber fahren, wird sie ausgegraut, aber verschwindet nicht ganz, aber wenn wir unseren Namen eingeben, verschwindet sie.

    Können Sie einen Artikel zu diesem Thema schreiben? Das wäre sehr hilfreich für mich und Leute wie mich, die Anfänger sind.

  • Arvind
    Permalink zu Kommentar#

    Dieses Tutorial rockt. Danke.

  • devlim
    Permalink zu Kommentar#

    Stellen Sie die Textarea dieses Kommentars auf `resize: "vertical"`, dann ist es beim Ändern der Größe viel besser als das.

  • mike
    Permalink zu Kommentar#

    Hallo Chris! Ich wollte letzte Woche etwas Ähnliches machen! Ich werde es mit dieser Methode noch einmal versuchen und versuchen, sie für ein WordPress-Theme zu verwenden, an dem ich gerade arbeite. Ich werde versuchen, die Dropdowns hinzuzufügen und Sie wissen zu lassen, wie es mir geht. Ihr Blog wird schnell zu meiner Lieblingsreferenz für solche Dinge… Cheers :)

  • Alfredo
    Permalink zu Kommentar#

    Hallo! Sehr tolle Demo. Ich freue mich, sie in einem Kundenprojekt zu verwenden. Ich habe einige Tests auf gemacht und habe unter Win XP mit Explorer einige Probleme. Könnte mir jemand helfen?
    Cheers:)

    • Alfredo
      Permalink zu Kommentar#

      Ich habe das HTML sehr schlecht verwendet. Entschuldigung. Sie können die Demo auch sehen :)

  • Jerm
    Permalink zu Kommentar#

    Hallo Chris, ich habe nicht alle Kommentare gelesen, um zu sehen, ob das hier schon erwähnt wurde, aber ich habe das heruntergeladen und es funktioniert in Opera nicht, zumindest nicht sehr gut.

    • Jerm
      Permalink zu Kommentar#

      Naja, das war sinnlos, ich bin hochgerollt und bam! Da war die Lösung ^^ Sorry.

  • Alfredo
    Permalink zu Kommentar#

    Hallo Chris, ich brauche immer noch Hilfe für IE.
    http://ekolor.sitiweblecce.it
    Ich habe die oben genannten Änderungen vorgenommen, aber es funktioniert immer noch nicht.
    Danke :)

    • Jeff
      Permalink zu Kommentar#

      Ich sehe das gleiche Problem auch in IE8. Irgendwelche Ideen, Chris oder jemand, wie man das beheben kann? Bitte…

  • Chris
    Permalink zu Kommentar#

    Hallo, großartiges Skript, danke – aber gibt es eine Möglichkeit, eine leichte Verzögerung bei der Bewegung der Magicline einzubauen?

    Chris

  • Vijendra
    Permalink zu Kommentar#

    Hallo Chris, ich bin ein großer Fan Ihrer Arbeit. Danke, dass Sie all diese Code-Stücke teilen.

  • LuK
    Permalink zu Kommentar#

    Hallo Chris,

    Danke für die Inspiration nochmals =), die Unterstrich-Sache in Beispiel 1 ist großartig…

    Ich benutze dieses Plugin seit mehreren Monaten bei verschiedenen Projekten und ich bin sicher, dass dieser Effekt auch damit erzielt werden könnte… der jQuery-Code ist meiner Meinung nach schwerer, aber er funktioniert wirklich mit allen Browsern und hat sehr nützliche zusätzliche Funktionen…

  • Ebnat Syukur
    Permalink zum Kommentar#

    Schöner Effekt, ich mag JQuery. Danke fürs Teilen

  • Te
    Permalink zum Kommentar#

    Toller Code!!

    Wissen Sie, wie man ihn vertikal statt horizontal laufen lassen kann?

  • haichen
    Permalink zum Kommentar#

    Ich bekomme example2 in IE zum Laufen, indem ich eine Browsererkennung in Ihr example.js einfüge. Nach „$(function(){“ können Sie etwas hinzufügen wie

    if ($.browser.msie) {
        $('#nav1').attr('rel','rgb(254,73,2)   ');
        $('#nav2').attr('rel','rgb(50,69,12)   ');
    ...
     }
     else  {
        $('#nav1').attr('rel','rgba(254,73,2,0.9)   ');
    ...
     };

    Im HTML müssen Sie id=”nav1″ hinzufügen…
    Ich habe auch die Änderungen in CSS von John Pisello vorgenommen.

    • Alfredo
      Permalink zum Kommentar#

      Hallo Haichen, ich habe versucht, Ihre Tipps umzusetzen. Ich benutze auch example two, habe auch die Änderungen von John P. angewendet, aber ich habe immer noch Probleme mit IE.
      Die Website-URL ist ekolor.sitiweblecce.it
      Ich füge auch den Code ein

      HTML

      <a href="index.php" rel="nofollow">Home</a>
          <a href="chisiamo-ekolor.php" rel="nofollow">Chi siamo</a>
          <a href="dovesiamo-ekolor.php" rel="nofollow">Dove Siamo</a>
          <a href="prodotti-ekolor.php" rel="nofollow">Prodotti</a>
          <a href="novita-ekolor.php" rel="nofollow">Novitá</a>
          <a href="contatti-ekolor.php" rel="nofollow">Contatti</a>

      BEISPIEL.JS

      $(function(){
      
          var $el, leftPos, newWidth,
              
              $mainNav2 = $("#example-two");

      Keine Änderungen…
      Vielen Dank für Ihre Hilfe

    • haichen

      Wenn Sie die Seite zuerst laden, erhalten Sie eine „falsche“ Farbe. Fügen Sie in example.js die Hintergrundzeile hinzu, um sie zu ändern.

      $magicLineTwo
              .width($(".current_page_item_two").width())
              .height($mainNav2.height())
              .css("left", $(".current_page_item_two a").position().left)
              .css("background",$(".current_page_item_two a").attr("rel")) ...
  • Akbar
    Permalink zum Kommentar#

    Danke Chris. Sehr nützliche JavaScript-Menü. Aber es ist nicht perfekt in IE 6. Und ich habe den Fehler behoben. Ich habe in meinem Menü das jpg-Bild als spitzen Pfeil am unteren Rand des Menüs verwendet.

    Die Seite lädt in IE6, die „magic-line“-Div ist in der Mitte des Menütextes positioniert.

  • marco
    Permalink zum Kommentar#

    Hallo!
    Sehr schöner Artikel.
    Gibt es eine Möglichkeit, die rote Leiste komplett auszublenden, wenn keine Seite aktiv ist?
    Ich meine, es gibt einige Seiten in meiner App, die nicht über das Menü erreichbar sind.
    Wenn der Benutzer dort ist, sollte die rote Linie verschwinden, wenn sie nicht über das Menü fährt.
    Irgendwelche Ideen?
    Danke!

  • haichen
    Permalink zum Kommentar#

    Ich versuche es noch einmal
    Hallo Alfredo,
    Die ID gehört zu Ihren Links. Sie müssen so aussehen

    <li><a id="nav2" rel="rgb(139,0,139)" href="chisiamo-ekolor.php">Chi siamo</a></li>
        <li><a id="nav3" rel="rgb(255,215,0)" href="dovesiamo-ekolor.php">Dove Siamo</a></li>

    Wie Sie sehen können, haben die Links standardmäßig rgb. Wenn der Browser kein IE ist, macht jQuery rgba. Transparenz ist also nur für Nicht-IEs.

    Bitte löschen Sie meinen vorherigen Beitrag
    danke

    • Alfredo
      Permalink zum Kommentar#

      Danke Haichen:)
      Habe die Änderungen vorgenommen, aber es funktioniert immer noch nicht..
      Haben Sie Geduld;)
      Ich füge den JS-Code ein, um Ihnen zu zeigen

      $(function(){
      		   
          if ($.browser.msie) {
      	    $('#nav1').attr('rel','rgb(128,128,0) ');
              $('#nav2').attr('rel','rgb(139,0,139) ');
      	    $('#nav3').attr('rel','rgb(255,215,0) ');
      	    $('#nav4').attr('rel','rgb(255,165,0) ');
      		$('#nav5').attr('rel','rgb(139,0,0) ');
      		$('#nav6').attr('rel','rgb(0,0,128) ');
      	} else {
      		$('#nav1').attr('rel','rgba(128,128,0,0.9) ');
              $('#nav2').attr('rel','rgba(139,0,139,0.9) ');
      	    $('#nav3').attr('rel','rgba(255,215,0,0.9) ');
      	    $('#nav4').attr('rel','rgba(255,165,0,0.9) ');
      		$('#nav5').attr('rel','rgba(139,0,0,0.9) ');
      		$('#nav6').attr('rel','rgba(0,0,128,0.9) ');
      	};
      	
      	var $el, leftPos, newWidth,
              
              $mainNav2 = $("#example-two");

      Vielen Dank
      Mit freundlichen Grüßen,
      Alfredo

    • haichen
      Permalink zum Kommentar#

      In Ihrem CSS müssen Sie einen Fallback für rgba einfügen.
      Fügen Sie beide Definitionen in das CSS ein.

      background: rgb(220, 133, 5);
      background: rgba(220, 133, 5, 0.9);

      und dies

      background-color: rgb(0,0,0);
      background-color: rgba(0,0,0,0.6);

      IE nimmt das rgb und die meisten anderen das rgba.

      Und es gibt zwei #nav1, aber das scheint kein Problem zu sein.

      Habe dies mit Ihrem Code ausprobiert und es hat in IE funktioniert.
      Hoffentlich hilft das.

    • Alfredo

      Danke Meister!:)) Jetzt läuft alles gut. Sie haben mir sehr geholfen. Vielen Dank:)
      Mit freundlichen Grüßen,
      Alfredo

    • haichen

      Ich habe einen weiteren Punkt hinzugefügt („falsche“ Farbe) versehentlich einige Kommentare weiter oben, aber vielleicht haben Sie ihn gesehen.
      haichen
      :-)

  • Kete
    Permalink zum Kommentar#

    Hallo!

    Ich hatte das Problem in Opera, aber ich habe „display:inline“ durch „float:left“ ersetzt und es hat funktioniert.

    Mein HTML-Code ist etwas anders, daher füge ich ihn hier ein

    HTML

    <a href="#" rel="nofollow">Option 1
    <a href="#" rel="nofollow">Option 2      		
    <a href="#" rel="nofollow">Option 3
    <a href="#" rel="nofollow">Option 4
    <a href="#" rel="nofollow">Option 5

    Und das CSS

    header{
    	overflow:hidden;
    	width:100%
    }
    	
    	header ul{
    		border-top: 2px solid white; 
    		border-bottom: 2px solid white;
    		clear:left;		
    		margin:0 auto; 
    		list-style:none;
    		overflow:hidden;
    		position:relative; 
    		width: 960px 
    	}
    	
    		header ul li{
    			float:left
    			/*display:inline;*/ 
    		}
    		
    			header ul li a{
    				color:#51acf7;
    				display:block;
    				float:left;
    				padding:6px 10px 4px 10px;
    				text-decoration:none;
    			}
    			
    			header ul li a:hover{
    				color:#999
    			}
    	
    		#magic-line{
    			position:absolute;
    			bottom:0px;
    			left:0;
    			width:100px;
    			height:2px;
    			background:#fe4902 
    		}

    Das JS ist dasselbe.

    Danke!

  • marco

    Hallo! Hat jemand example 1 in IE zum Laufen gebracht? Danke

  • jonmufc

    Danke für das Teilen dieses Artikels. Ich werde Ihren Code für mein Projekt verwenden.

  • Dennis

    Gibt es eine Möglichkeit, das Menü beim Benutzen anderer Links zu wechseln? Zum Beispiel habe ich eine „Nachrichten“-Seite auf meiner Website (news.html); und ich möchte, dass sich das Menü nicht nur ändert, wenn ich auf einen Nachrichtenlink im Menü klicke, sondern auch auf einen zufälligen Nachrichtenlink aus dem Hauptteil der Website. Ein weiteres Problem ist, dass ich IFRAME als Hauptteil der Website verwende. Ich dachte, ich brauche so etwas

    <a href="news.html" rel="nofollow">

    Das ist der Code im IFRAME-Body; außerdem habe ich dies

    im Hauptindex-Seiten-Code.

    Aber es funktioniert nicht. Beachten Sie, dass, wenn ich alert(‚parent.document.getElementById(‚a1‚).className‘); verwende, die Nachricht mit dem Text „testclass“ normal angezeigt wird.

    Wahrscheinlich muss ich eine zusätzliche Funktionalität des example.js-Skripts auslösen? Wie kann ich das machen?

  • Rob

    Das ist lächerlich raffiniert. Meine Güte, ich möchte meine eigene Website zerlegen, nur um diese Art von Navigation zu implementieren. Danke fürs Teilen!!!

  • Liam O’Leary

    Tolles Stück Coding, es ist eine riesige Hilfe, eine CSS-jQuery-basierte Navigation statt einer hässlichen Flash-Variante zu haben!

    Gut gemacht, Chris!

  • Jordan

    Ich habe Probleme damit in IE8..
    Es funktioniert in allen anderen getesteten Browsern..

    In IE... wenn man über den Link fährt und dann mit der Maus weggeht, rennt die Linie weg :P
    Sie läuft komplett von der Seite nach rechts... erzeugt eine horizontale Scrollleiste. Ideen?

  • Johnny

    Könnte dies nicht mit einer CSS:hover-Klasse gemacht werden?

  • stulk

    Fantastisches Menü! Ich habe einen Kontaktbereich und möchte, dass der Button separat ist, damit er rechts angezeigt wird. Ist das möglich? Ich habe hinzugefügt

    .right_page_item a { float: right; color: white !important; }

    zum CSS und zur Webseite, aber immer noch kein Erfolg

  • Adrian

    Hallo,

    Tolles Tutorial.

    Ich hatte ein Problem mit IE8 im Standardmodus (in der Kompatibilitätsansicht war es aber in Ordnung) – die anfängliche Breite des current_page_item, die diesen Punkt tatsächlich leer machte, bis ich mit der Maus darüber fuhr. Nicht gut. Es scheint ein Problem mit der Ermittlung der Breite eines Inline-Elements in IE8 zu geben (obwohl der Fehler nicht auftrat, als newWidth beim Überfahren eines neuen Elements ermittelt wurde – seltsam, oder?).

    Das Ändern des CSS von folgendem
    #example-one li { display: inline; }

    in

    #example-one li { display: inline-block; }

    löst das Problem. Es scheint auch das Opera-Problem zu lösen, das Sie in Ihrem Tutorial erwähnen!

    Machen Sie weiter so.

  • Husain

    Danke für die Idee und das Tutorial! Ich habe es auf meinem Blog mit einer leichten Modifikation implementiert. Es gibt eine Oberlinie und eine Unterlinie in meinem Theme.

  • HerrAdams
    Permalink zum Kommentar#

    Ich habe ein Problem

    Ich möchte das 2. Beispiel von MagicLine verwenden, aber wenn ich jQuery 1.8.3 implementiere (ich brauche es für fancybox), ändert sich die Farbe nicht mehr :(

  • rommel
    Permalink zum Kommentar#

    Wie wird es funktionieren, wenn es auf einer Seite aktiv ist.

  • Izzy
    Permalink zum Kommentar#

    Hat jemand eine Lösung für das Untermenü-Problem gefunden? Vielleicht eine kleine Demo oder so? Bitte!!! :)

  • David
    Permalink zum Kommentar#

    Entschuldigung, aber es gibt einen Fehler im JavaScript-Code

    leftPos = $el.position().left;

    sollte sein

    leftPos = $el.parent().position().left;

    Und vielen Dank fürs Teilen.

    • David
      Permalink zum Kommentar#

      Und ich habe vergessen, auch diesen Fehler zu erwähnen

      .css("left", $("li.current_page_item a").position().left)

      sollte sein

      .css("left", $("li.current_page_item").position().left)

      All dies, weil, wenn Sie sich auf die ‚a‘-Tag-Position beziehen, ist sie ; und wird immer ; 0 (Null) zurückgeben

      Nochmals vielen Dank

  • BarnOwl

    Was wäre die Änderung, um die Animation nur bei Klick zu aktivieren? Ich habe das .hover-Ereignis in ein .click-Ereignis geändert $("#example-one li").find("a").click(function() {aber natürlich gibt es ein Aufblitzen des Roten unter der Auswahl, bevor die Animation stattfinden kann. Wie kann ich dieses Aufblitzen vermeiden?

    • BarnOwl

      Wissen Sie was, ich habe das total verbockt. Das .click funktioniert perfekt, ich hatte versehentlich eine zweite Animate-Funktion zum Skript hinzugefügt. Ich liebe dieses Plugin jetzt noch mehr!

  • AWC

    Das war fast genau das, was ich gesucht habe!
    Musste dies für einen Kunden verwenden und habe folgende Änderungen vorgenommen

    Nur die obige Zeile
    Die Zeile musste nur so breit sein wie der Link
    Die Linie konnte beim Wechseln zwischen Ankern nicht zurückspringen
    current_page_item musste die gleiche Farbe behalten, wenn :hover, aber andere mussten sich bei :hover ändern

    Schauen Sie sich den Fiddle an
    http://jsfiddle.net/alexwcoleman/Dwv7X/
    (Mein jQuery/JavaScript ist nicht stark, also wenn es Vorschläge gibt…)

  • Max

    Hallo,

    Ich möchte dieses MagicLine für eine vertikale Navigation verwenden. Daher habe ich die Frage: Kann die magische Linie vertikal statt horizontal funktionieren? Oder gibt es dafür ein Tutorial?

  • Barn0wl

    Ich versuche, das Plugin zu aktualisieren, um es auf einer Website zu verwenden, die JQuery 1.9 oder 2.0 verwendet. Weiß jemand aus dem Stegreif, welche der enthaltenen Funktionen in der JS veraltet/ersetzt wurden?

  • parminder

    Hallo

    Danke für all die schönen Dinge.
    Ein Problem, das ich habe, wenn ich position:relative auf das li-Tag anwende. Das funktioniert nicht.

  • bluantiboo

    Ich musste position:relative zu #example-one li a hinzufügen, um die magic-line tatsächlich hinter den Links zu sehen, ohne sie war sie darüber, da sie die z-index-Einstellungen ignorierte

  • Matt Kent

    Hallo,

    Ich bin kein Coder, aber normalerweise bin ich kompetent genug, um Code an meine Bedürfnisse anzupassen, und kann meine eigenen Implementierungen normalerweise durch Recherche herausfinden. In diesem Fall stoße ich an meine Grenzen.

    Ich weiß nicht, ob mir jemand helfen kann. Ich versuche, dies auf einer Website zu verwenden, die ich für Squarespace erstelle. Ich habe jQuery-Addons schon oft gemacht, aber ich bekomme dieses hier nicht zum Laufen. Ich habe das Skript geändert, um meine Vorlagenklassen und IDs widerzuspiegeln, und es mit einem Codeblock getestet, den ich mitten auf meiner Seite eingefügt habe. Aber aus irgendeinem Grund bekomme ich es nicht zum Laufen mit dem tatsächlichen Menü oben auf dem Bildschirm.

    Ich habe das Gefühl, dass der Teil des Codes, der den Hoverbereich über den Links findet, den Cursor wegen etwas im CSS der Vorlage nicht sieht. Jede Hilfe wäre SEHR dankbar. Sie können die Seite unter

    http://boxjelly.squarespace.com

    .css("left", $(".active-link a").position().left)
    

    &

    $(„.cf li a“).hover(function() {

    Sollte der Teil des Codes, der sucht, weiter untersucht werden? z.B.
    $(„.desktopnav nav.main-Nav div.nav-wrapper ul.cf li a…

    Ich weiß nicht, ob das Sinn macht

    -Matt

    • Matt Kent

      Oh, und das ist der gesamte Code, den ich verwende + das CSS

      $(function() {

      var $el, leftPos, newWidth,
          $mainNav = $(".cf");
      
      $mainNav.append("");
      var $magicLine = $("#magic-line");
      
      $magicLine
          .width($(".active-link").width())
          .css("left", $(".active-link a").position().left)
          .data("origLeft", $magicLine.position().left)
          .data("origWidth", $magicLine.width());
      
      $(".cf li a").hover(function() {
          $el = $(this);
          leftPos = $el.position().left;
          newWidth = $el.parent().width();
          $magicLine.stop().animate({
              left: leftPos,
              width: newWidth
          });
      }, function() {
          $magicLine.stop().animate({
              left: $magicLine.data("origLeft"),
              width: $magicLine.data("origWidth")
          });    
      });
      

      });

      //Magic Line
      //.cf { margin: 0 auto; list-style: none; position: relative; }
      //.cf li { display: inline; }
      //.cf li a { color: #bbb; font-size: 14px; display: block; float: left; text-decoration: none; text-transform: uppercase; }
      //.cf li a:hover { color: white; }
      #magic-line { position: absolute; bottom: -2px; left: 0; width: 100px; height: 2px; background: #fe4902; }

      Ich habe die meisten Stilelemente auskommentiert, da das Navigationsmenü bereits Stilelemente angewendet hat.

  • Dieser Kommentarbereich ist geschlossen. Wenn Sie wichtige Informationen teilen möchten, kontaktieren Sie uns bitte.