2017-08-14 6 views
1

Tout mon défilement lisse fonctionne parfaitement, cependant, l'ancre s'arrête tout en haut de la page, mais ma barre de navigation est fixée au sommet, alors que Je l'ai besoin de faire, est compensé le haut de la hauteur de la barre de navigation. Comment pourrais-je m'y prendre?Comment changer le décalage sur le défilement lisse Animation JQuery par une hauteur de la barre de navigation

<script> 
    $(document).ready(function(){ 
    // Add smooth scrolling to all links 
    $("a").on('click', function(event) { 

     // Make sure this.hash has a value before overriding default behavior 
     if (this.hash !== "") { 
     // Prevent default anchor click behavior 
     event.preventDefault(); 

     // Store hash 
     var hash = this.hash; 

     // Using jQuery's animate() method to add smooth page scroll 
     // The optional number (800) specifies the number of milliseconds 
     // it takes to scroll to the specified area 
     $('html, body').animate({ 
      scrollTop: $(hash).offset().top 
     }, 1000, function(){ 

      // Add hash (#) to URL when done scrolling (default click behavior) 
      window.location.hash = hash; 
     }); 
     } // End if 
    }); 
    }); 
</script> 

Répondre

0

Assez simple: scrollTop: $('#hash').offset().top - navbarHeight.

+0

Ai-je besoin de navbarHeight pour être entre parenthèses, ou utiliser des unités spécifiques? –

+0

@FilipGrebowski, vous pouvez utiliser un nombre si vous le connaissez comme 'scrollTop: $ (hash) .offset(). Top - 48'. Ou obtenir la hauteur de la barre de navigation par programmation en utilisant quelque chose comme ceci: 'scrollTop: $ (hash) .offset(). Top - $ (# navbarId) .height()'. –

+0

Hmm .. ça ne semble pas fonctionner. Je veux dire que je suis complètement d'accord avec la logique, mais soit elle n'a aucun effet, soit déborde complètement sans motif. –