Search code examples
javascriptjqueryscrollsmooth-scrolling

How to make this scroll 120px above the content?


When I apply this script, it goes to the link but I want it to go 120px above the content it is linked to.

Here is the code:

<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 !== 0) {
      // 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
      }, 800, function(){

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

EDIT #02

Here is my HTML, CSS and Java for those who are wondering:

https://codepen.io/crosso_7/pen/WYegpY


Solution

  • the problem is window.location.hash = hash; after animate it do second action which is same with default action. Replace it with history.pushState(null, null, hash); to rewrite the url history and add hash

    $('html, body').animate({
      scrollTop: $(hash).offset().top - 120
    }, 800, function() {
    
      // Add hash (#) to URL when done scrolling (default click behavior)
      //window.location.hash = hash;
      history.pushState(null, null, hash);
    });