Shoora
5/13/2019 - 4:56 AM

smooth scrolling for same-page links

smooth scrolling for same-page links

$(document).ready(function() {

  var locationPath = filterPath(location.pathname);
  $('body').click(function(event) {
    var $link = $(event.target).closest('a');
    
    //stop if it's not a link
    if (!$link.length || $link.parent().is('.reply')) { return; }
  
    var link = $link[0];
    var thisPath = filterPath(link.pathname) || locationPath;
    if (  locationPath == thisPath
    && (location.hostname == link.hostname || !link.hostname)
    && link.hash.replace(/#/,'') ) {
      event.preventDefault();
      var $target = $(link.hash), target = link.hash;
      if ($target.length) {
        var targetOffset = $target.offset().top;

        rootScroller().animate({scrollTop: targetOffset}, 900, function() {
          location.hash = target;
        });
      }
    }

  });
  
  function filterPath(string) {
    return string.replace(/^\/|(index|default).[a-zA-Z]{3,4}$|\/$/g,'');
  }
  
  function rootScroller() {
    var $html = $('html');
    if ($html.scrollTop() > 0) {
      return $html;
    }
    var $body = $('body');
    if ($body.scrollTop() > 0) {
      return $body;
    }

    if ($html.scrollTop(1) && $html.scrollTop() === 1) {
      $html.scrollTop(0);
      return $html;
    } else if ($body.scrollTop(1) && $body.scrollTop() === 1) {
      $body.scrollTop(0);
      return $body;
    } else {
      return $({});
    }
  }
  
});