2014-12-22 4 views
10

ich möchte markieren Sie den Menüpunkt, wenn das div ist gescrollt // oder geklickt.Highlight-Menü beim Scrollen (wenn div erreichen)

http://jsfiddle.net/WeboGraph/vu6hN/2/ (das ist ein Beispiel, was ich will)

mein Code: (JS)

$(document).ready(function(){ 
     $('nav a').on('click', function(event) { 
      $(this).parent().find('a').removeClass('active_underlined'); 
      $(this).addClass('active_underlined'); 
     }); 

     $(window).on('scroll', function() { 
      $('.target').each(function() { 
       if($(window).scrollTop() >= $(this).position().top) { 
        var id = $(this).attr('id'); 
        $('nav a').removeClass('active_underlined'); 
        $('nav a[href=#'+ id +']').addClass('active_underlined'); 
       } 
      }); 
     }); 
    }); 

meine (html nav)

 <nav> 
      <div id="cssmenu"> 
       <ul id="horizontalmenu" class="underlinemenu"> 
        <li><a data-scroll href="#fdesigns" class="active_underlined">FDesigns</a> </li> 
        <li><a data-scroll href="#skills">skills</a> </li> 
        <li><a data-scroll href="#workflow">WORKFLOW</a> </li> 
        <li><a data-scroll href="#portfolio">Portfolio</a> </li> 
        <li><a data-scroll href="#about">About</a> </li> 
        <li><a data-scroll href="#kontakt">Kontakt</a> </li> 
       </ul> 
      </div> 
     </nav> 

meine (css)

.active_underlined a { 
    color: #fff; 
    border-bottom: 2px solid #ebebeb; 
} 

a.active_underlined { 
    color: #fff; 
    border-bottom: 2px solid #ebebeb; 
} 

hier eine Verbindung zu dem Projekt: http://www.f-designs.de/test_onesite

+0

dass Geige scheint gut zu funktionieren. Was genau ist das Problem? – Pevara

+0

http://www.f-designs.de/test_onesite das ist meine Website und es funktioniert nicht mit dem Code über die Geige ist ein Beispiel, was ich will auf meiner Seite – fab

+1

'Position()' Methode auf Ihrem '. Zielelemente gibt die Position von (0,0) zurück. Das impliziert das 'if ($ (window) .scrollTop()> = $ (this) .position(). Oben) {' ist immer wahr. –

Antwort

7

Verwenden $(this).offset().top anstelle von $(this).position().top

Fiddle

Als .position() in dem Satz von passenden Elementen, die die aktuellen Koordinaten des ersten Elements erhalten, bezogen auf die Offsetmutter während .offset() Ruft die aktuellen Koordinaten des ersten Elements in der Menge der übereinstimmenden Elemente relativ zum Dokument ab.

In Ihrer Webseite alle DIV mit Klasse in .target sind im Inneren deshalb alle das Element der Klasse .target kehren den Wert .position().top gleich 0

den Offset-Wert verringern, so dass die class ändern, wenn Element das Menü erreichen indem man die if Bedingung wie folgt macht:

if($(window).scrollTop() >= $(this).offset().top - $("#cssmenu").height()) 
+0

hey thx es funktioniert, aber jetzt, wenn ich auf das Menü das Element vor dem angeklickt Element klicken wird hervorgehoben (vielleicht muss ich festlegen, dass .offset top einige Pixel vor dem oberen Rand des Browsers berechnet?) können Sie mir bitte helfen? – fab

+0

Aktualisieren Sie die Antwort. Sie müssen nur 'cssmenu' Höhe vom Offset verringern. Übrigens, deine Seite sieht fantastisch aus. –

+0

@ gaurav kalyan, danke, wenn du meine Seite magst :) kannst du mir eine ausführlichere Antwort geben // Erklärung, was ich zu tun habe? thx und mery x-mas – fab