Skip to content

Instantly share code, notes, and snippets.

@developandbehappy
Created April 24, 2017 07:20
Show Gist options
  • Select an option

  • Save developandbehappy/fb09bd2201671fdefc339f35cde4c019 to your computer and use it in GitHub Desktop.

Select an option

Save developandbehappy/fb09bd2201671fdefc339f35cde4c019 to your computer and use it in GitHub Desktop.
(function () {
var speed = 500;
var moving_frequency = 15; // Affects performance !
var links = document.getElementsByTagName('a');
var href;
for (var i = 0; i < links.length; i++) {
href = (links[i].attributes.href === undefined) ? null : links[i].attributes.href.nodeValue.toString();
if (href !== null && href.length > 1 && href.substr(0, 1) == '#') {
links[i].onclick = function () {
var element;
var href = this.attributes.href.nodeValue.toString();
if (element = document.getElementById(href.substr(1))) {
var hop_count = speed / moving_frequency
var getScrollTopDocumentAtBegin = getScrollTopDocument();
var gap = (getScrollTopElement(element) - getScrollTopDocumentAtBegin) / hop_count;
for (var i = 1; i <= hop_count; i++) {
(function () {
var hop_top_position = gap * i;
setTimeout(function () {
window.scrollTo(0, hop_top_position + getScrollTopDocumentAtBegin);
}, moving_frequency * i);
})();
}
}
return false;
};
}
}
var getScrollTopElement = function (e) {
var top = 0;
while (e.offsetParent != undefined && e.offsetParent != null) {
top += e.offsetTop + (e.clientTop != null ? e.clientTop : 0);
e = e.offsetParent;
}
return top;
};
var getScrollTopDocument = function () {
return document.documentElement.scrollTop + document.body.scrollTop;
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment