Last active
September 10, 2016 02:59
-
-
Save SufferProgrammer/a5034bd6bbda17949a428e4aaa7b5ccb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() // Code in a function to create an isolate scope | |
{ | |
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