Problem with scrollto offset javascript because of header












2















I need help with this scrollto code snippet. The problem is that I need to set an offset to account for my menu. Without the offset the header that I scroll to gets buried underneath the menu. See for yourselves here:https://julyfx.mystagingwebsite.com/stanford-mba-msx-essay-topic-analysis-examples/
Would anyone happen to have a suggestion?
Thank you! Leah






<script type="text/javascript">
jQuery(document).ready(function($) {


$('a[href*="#"]')
// Remove links that don't actually link to anything
.not('[href="#"]')
.not('[href="#0"]')
.click(function(event) {
// On-page links
if (
location.pathname.replace(/^//, '') == this.pathname.replace(/^//, '')
&&
location.hostname == this.hostname
) {
// Figure out element to scroll to
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
// Does a scroll target exist?
if (target.length) {
// Only prevent default if animation is actually gonna happen
event.preventDefault();
$('html, body').animate({
scrollTop: target.offset().top
}, 1000, function() {
// Callback after animation
// Must change focus!
var $target = $(target);
$target.focus();
if ($target.is(":focus")) { // Checking if the target was focused
return false;
} else {
$target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
$target.focus(); // Set focus again
};
});
}
}
});
});
</script>












share|improve this question





























    2















    I need help with this scrollto code snippet. The problem is that I need to set an offset to account for my menu. Without the offset the header that I scroll to gets buried underneath the menu. See for yourselves here:https://julyfx.mystagingwebsite.com/stanford-mba-msx-essay-topic-analysis-examples/
    Would anyone happen to have a suggestion?
    Thank you! Leah






    <script type="text/javascript">
    jQuery(document).ready(function($) {


    $('a[href*="#"]')
    // Remove links that don't actually link to anything
    .not('[href="#"]')
    .not('[href="#0"]')
    .click(function(event) {
    // On-page links
    if (
    location.pathname.replace(/^//, '') == this.pathname.replace(/^//, '')
    &&
    location.hostname == this.hostname
    ) {
    // Figure out element to scroll to
    var target = $(this.hash);
    target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
    // Does a scroll target exist?
    if (target.length) {
    // Only prevent default if animation is actually gonna happen
    event.preventDefault();
    $('html, body').animate({
    scrollTop: target.offset().top
    }, 1000, function() {
    // Callback after animation
    // Must change focus!
    var $target = $(target);
    $target.focus();
    if ($target.is(":focus")) { // Checking if the target was focused
    return false;
    } else {
    $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
    $target.focus(); // Set focus again
    };
    });
    }
    }
    });
    });
    </script>












    share|improve this question



























      2












      2








      2








      I need help with this scrollto code snippet. The problem is that I need to set an offset to account for my menu. Without the offset the header that I scroll to gets buried underneath the menu. See for yourselves here:https://julyfx.mystagingwebsite.com/stanford-mba-msx-essay-topic-analysis-examples/
      Would anyone happen to have a suggestion?
      Thank you! Leah






      <script type="text/javascript">
      jQuery(document).ready(function($) {


      $('a[href*="#"]')
      // Remove links that don't actually link to anything
      .not('[href="#"]')
      .not('[href="#0"]')
      .click(function(event) {
      // On-page links
      if (
      location.pathname.replace(/^//, '') == this.pathname.replace(/^//, '')
      &&
      location.hostname == this.hostname
      ) {
      // Figure out element to scroll to
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      // Does a scroll target exist?
      if (target.length) {
      // Only prevent default if animation is actually gonna happen
      event.preventDefault();
      $('html, body').animate({
      scrollTop: target.offset().top
      }, 1000, function() {
      // Callback after animation
      // Must change focus!
      var $target = $(target);
      $target.focus();
      if ($target.is(":focus")) { // Checking if the target was focused
      return false;
      } else {
      $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
      $target.focus(); // Set focus again
      };
      });
      }
      }
      });
      });
      </script>












      share|improve this question
















      I need help with this scrollto code snippet. The problem is that I need to set an offset to account for my menu. Without the offset the header that I scroll to gets buried underneath the menu. See for yourselves here:https://julyfx.mystagingwebsite.com/stanford-mba-msx-essay-topic-analysis-examples/
      Would anyone happen to have a suggestion?
      Thank you! Leah






      <script type="text/javascript">
      jQuery(document).ready(function($) {


      $('a[href*="#"]')
      // Remove links that don't actually link to anything
      .not('[href="#"]')
      .not('[href="#0"]')
      .click(function(event) {
      // On-page links
      if (
      location.pathname.replace(/^//, '') == this.pathname.replace(/^//, '')
      &&
      location.hostname == this.hostname
      ) {
      // Figure out element to scroll to
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      // Does a scroll target exist?
      if (target.length) {
      // Only prevent default if animation is actually gonna happen
      event.preventDefault();
      $('html, body').animate({
      scrollTop: target.offset().top
      }, 1000, function() {
      // Callback after animation
      // Must change focus!
      var $target = $(target);
      $target.focus();
      if ($target.is(":focus")) { // Checking if the target was focused
      return false;
      } else {
      $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
      $target.focus(); // Set focus again
      };
      });
      }
      }
      });
      });
      </script>








      <script type="text/javascript">
      jQuery(document).ready(function($) {


      $('a[href*="#"]')
      // Remove links that don't actually link to anything
      .not('[href="#"]')
      .not('[href="#0"]')
      .click(function(event) {
      // On-page links
      if (
      location.pathname.replace(/^//, '') == this.pathname.replace(/^//, '')
      &&
      location.hostname == this.hostname
      ) {
      // Figure out element to scroll to
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      // Does a scroll target exist?
      if (target.length) {
      // Only prevent default if animation is actually gonna happen
      event.preventDefault();
      $('html, body').animate({
      scrollTop: target.offset().top
      }, 1000, function() {
      // Callback after animation
      // Must change focus!
      var $target = $(target);
      $target.focus();
      if ($target.is(":focus")) { // Checking if the target was focused
      return false;
      } else {
      $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
      $target.focus(); // Set focus again
      };
      });
      }
      }
      });
      });
      </script>





      <script type="text/javascript">
      jQuery(document).ready(function($) {


      $('a[href*="#"]')
      // Remove links that don't actually link to anything
      .not('[href="#"]')
      .not('[href="#0"]')
      .click(function(event) {
      // On-page links
      if (
      location.pathname.replace(/^//, '') == this.pathname.replace(/^//, '')
      &&
      location.hostname == this.hostname
      ) {
      // Figure out element to scroll to
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      // Does a scroll target exist?
      if (target.length) {
      // Only prevent default if animation is actually gonna happen
      event.preventDefault();
      $('html, body').animate({
      scrollTop: target.offset().top
      }, 1000, function() {
      // Callback after animation
      // Must change focus!
      var $target = $(target);
      $target.focus();
      if ($target.is(":focus")) { // Checking if the target was focused
      return false;
      } else {
      $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
      $target.focus(); // Set focus again
      };
      });
      }
      }
      });
      });
      </script>






      javascript jquery scrollto






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Oct 28 '18 at 22:43









      Johannes

      36.8k102967




      36.8k102967










      asked Oct 27 '18 at 22:18









      Leah DerusLeah Derus

      103116




      103116
























          2 Answers
          2






          active

          oldest

          votes


















          1














          Should be relatively easy: If your header is for example 85px high, you can just add these 85px to the offset in your code, so this line



          scrollTop: target.offset().top


          becomes



          scrollTop: target.offset().top - 85


          that way the window will scroll 85px less than calculated, so the section will not be hidden behind the header.






          share|improve this answer



















          • 1





            Thank you Johannes! You really helped me out!

            – Leah Derus
            Oct 28 '18 at 23:47



















          0














          Just a suggestion have you tried something like:



          window.scrollTo({top: (jQuery('#2').position().top-jQuery('header').height()), behavior: 'smooth' })


          ?



          Where #2 would be taken from your this.hash target above?






          share|improve this answer
























          • Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

            – Leah Derus
            Oct 27 '18 at 23:55











          • I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

            – Kummer Wolfe
            Oct 27 '18 at 23:59











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53026768%2fproblem-with-scrollto-offset-javascript-because-of-header%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Should be relatively easy: If your header is for example 85px high, you can just add these 85px to the offset in your code, so this line



          scrollTop: target.offset().top


          becomes



          scrollTop: target.offset().top - 85


          that way the window will scroll 85px less than calculated, so the section will not be hidden behind the header.






          share|improve this answer



















          • 1





            Thank you Johannes! You really helped me out!

            – Leah Derus
            Oct 28 '18 at 23:47
















          1














          Should be relatively easy: If your header is for example 85px high, you can just add these 85px to the offset in your code, so this line



          scrollTop: target.offset().top


          becomes



          scrollTop: target.offset().top - 85


          that way the window will scroll 85px less than calculated, so the section will not be hidden behind the header.






          share|improve this answer



















          • 1





            Thank you Johannes! You really helped me out!

            – Leah Derus
            Oct 28 '18 at 23:47














          1












          1








          1







          Should be relatively easy: If your header is for example 85px high, you can just add these 85px to the offset in your code, so this line



          scrollTop: target.offset().top


          becomes



          scrollTop: target.offset().top - 85


          that way the window will scroll 85px less than calculated, so the section will not be hidden behind the header.






          share|improve this answer













          Should be relatively easy: If your header is for example 85px high, you can just add these 85px to the offset in your code, so this line



          scrollTop: target.offset().top


          becomes



          scrollTop: target.offset().top - 85


          that way the window will scroll 85px less than calculated, so the section will not be hidden behind the header.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Oct 27 '18 at 23:50









          JohannesJohannes

          36.8k102967




          36.8k102967








          • 1





            Thank you Johannes! You really helped me out!

            – Leah Derus
            Oct 28 '18 at 23:47














          • 1





            Thank you Johannes! You really helped me out!

            – Leah Derus
            Oct 28 '18 at 23:47








          1




          1





          Thank you Johannes! You really helped me out!

          – Leah Derus
          Oct 28 '18 at 23:47





          Thank you Johannes! You really helped me out!

          – Leah Derus
          Oct 28 '18 at 23:47













          0














          Just a suggestion have you tried something like:



          window.scrollTo({top: (jQuery('#2').position().top-jQuery('header').height()), behavior: 'smooth' })


          ?



          Where #2 would be taken from your this.hash target above?






          share|improve this answer
























          • Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

            – Leah Derus
            Oct 27 '18 at 23:55











          • I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

            – Kummer Wolfe
            Oct 27 '18 at 23:59
















          0














          Just a suggestion have you tried something like:



          window.scrollTo({top: (jQuery('#2').position().top-jQuery('header').height()), behavior: 'smooth' })


          ?



          Where #2 would be taken from your this.hash target above?






          share|improve this answer
























          • Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

            – Leah Derus
            Oct 27 '18 at 23:55











          • I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

            – Kummer Wolfe
            Oct 27 '18 at 23:59














          0












          0








          0







          Just a suggestion have you tried something like:



          window.scrollTo({top: (jQuery('#2').position().top-jQuery('header').height()), behavior: 'smooth' })


          ?



          Where #2 would be taken from your this.hash target above?






          share|improve this answer













          Just a suggestion have you tried something like:



          window.scrollTo({top: (jQuery('#2').position().top-jQuery('header').height()), behavior: 'smooth' })


          ?



          Where #2 would be taken from your this.hash target above?







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Oct 27 '18 at 23:46









          Kummer WolfeKummer Wolfe

          49329




          49329













          • Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

            – Leah Derus
            Oct 27 '18 at 23:55











          • I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

            – Kummer Wolfe
            Oct 27 '18 at 23:59



















          • Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

            – Leah Derus
            Oct 27 '18 at 23:55











          • I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

            – Kummer Wolfe
            Oct 27 '18 at 23:59

















          Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

          – Leah Derus
          Oct 27 '18 at 23:55





          Hi Kummer, Thanks for your suggestion. Unfortunately I'm completely unsophisticated when it comes to all this. I thought the solution might have something to do with adding a numeric offset around the target.offset() or something. But I'm not sure.

          – Leah Derus
          Oct 27 '18 at 23:55













          I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

          – Kummer Wolfe
          Oct 27 '18 at 23:59





          I understand. And yes, adding a numerical offset will do the trick. By getting jQuery('header').height() you could get such a number to offset your target.offset().top with. It would even account for the header changing height when on say a mobile device.

          – Kummer Wolfe
          Oct 27 '18 at 23:59


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53026768%2fproblem-with-scrollto-offset-javascript-because-of-header%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          List item for chat from Array inside array React Native

          Thiostrepton

          Caerphilly