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 $({});
}
}
});