2013-05-13 17 views
6

ich den folgenden Code bin mit der Bewegung zu glätten, wenn der Benutzer auf einen Link, dass seine href beginnt mit einem „#“jQuery: Das Hinzufügen der scrollTop zusätzlichen Pixel

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
     e.preventDefault(); 
     var target = this.hash, 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top 
     }, 900, 'swing', function() { 
      window.location.hash = target; 
     }); 
    }); 
}); 

klickt muss ich über 40px hinzufügen zum ScrollTop-Wert, so dass der Haltepunkt den Inhalt abdeckt. Ich änderte den Code zu diesem, aber es scheint nicht zu sein, es zu tun (die 40 in Richtung Ende des Codes feststellen):

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
     e.preventDefault(); 
     var target = this.hash, 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top + 40 
     }, 900, 'swing', function() { 
      window.location.hash = target; 
     }); 
    }); 
}); 
+0

Sie haben '+ 40' in der richtigen Stelle. Was passiert? –

+0

Ich habe gerade hinzugefügt, dass 40 zurück, bitte schauen Sie. Egal welchen Wert ich hinzufüge, es stoppt an der gleichen Stelle. – farjam

+0

Haben Sie überprüft, dass $ target.offset(). Top den erwarteten Wert zurückgibt? –

Antwort

2

Die +40 versetzt, die Sie wirklich wollen, um ein -40 nicht funktioniert, weil sobald die Animation der Browser beendet tut es Standardreaktion mit der id Sie vorbei an window.location.hash

Sie entweder die Zeile entfernen oder fügen Sie den folgenden CSS zu den Elementen wird gescrollt auf das Element gehen.

padding-top: 40px; 
margin-top: -40px; 

Siehe FIDDLE

+0

Danke, deinem Vorschlag gefolgt und meine js angepasst, um meinem Ziel eine Klasse von "zielgerichtet" hinzuzufügen; obwohl ich die css für mein ".targeted" -div anpassen kann, wird die seite nicht gut aussehen, wenn leute anfangen, vertikal nach oben und unten zu scrollen, weil sie die lücke sehen, die von meinem css hinzugefügt wird. Ich hoffe, ich mache Sinn. – farjam

+0

Ist die Zeile 'window.location.hash = target;' für eine andere Funktion in Ihrem Code kritisch? –

+0

Nein, ist es nicht. Es kann entfernt werden. – farjam

13

Ich kenne eine späte Antwort, aber jemand eine Lösung sucht, kann dies versuchen.

Durch die Zugabe von .top + (-40) wird der Trick

$('html, body').stop().animate({ 
    'scrollTop': $target.offset().top + (-40) 
}, 900, 'swing', function() { 
    window.location.hash = target; 
}); 
+0

Dies ist eine bessere Lösung, nicht mit CSS-Klassen Switching Unordnung. –

Verwandte Themen