diff options
author | Scott Jackson <daneren2005@gmail.com> | 2012-07-02 21:24:02 -0700 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2012-07-02 21:24:02 -0700 |
commit | a1a18f77a50804e0127dfa4b0f5240c49c541184 (patch) | |
tree | 19a38880afe505beddb5590379a8134d7730a277 /subsonic-main/src/main/webapp/script/smooth-scroll.js | |
parent | b61d787706979e7e20f4c3c4f93c1f129d92273f (diff) | |
download | dsub-a1a18f77a50804e0127dfa4b0f5240c49c541184.tar.gz dsub-a1a18f77a50804e0127dfa4b0f5240c49c541184.tar.bz2 dsub-a1a18f77a50804e0127dfa4b0f5240c49c541184.zip |
Initial Commit
Diffstat (limited to 'subsonic-main/src/main/webapp/script/smooth-scroll.js')
-rw-r--r-- | subsonic-main/src/main/webapp/script/smooth-scroll.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/subsonic-main/src/main/webapp/script/smooth-scroll.js b/subsonic-main/src/main/webapp/script/smooth-scroll.js new file mode 100644 index 00000000..9199732b --- /dev/null +++ b/subsonic-main/src/main/webapp/script/smooth-scroll.js @@ -0,0 +1,102 @@ +/*-------------------------------------------------------------------------- + * Smooth Scroller Script, version 1.0.1 + * (c) 2007 Dezinerfolio Inc. <midart@gmail.com> + * + * For details, please check the website : http://dezinerfolio.com/ + * +/*--------------------------------------------------------------------------*/ + +Scroller = { + // control the speed of the scroller. + // dont change it here directly, please use Scroller.speed=50; + speed:10, + + // returns the Y position of the div + gy: function (d) { + gy = d.offsetTop + if (d.offsetParent) while (d = d.offsetParent) gy += d.offsetTop + return gy + }, + + // returns the current scroll position + scrollTop: function (){ + body=document.body + d=document.documentElement + if (body && body.scrollTop) return body.scrollTop + if (d && d.scrollTop) return d.scrollTop + if (window.pageYOffset) return window.pageYOffset + return 0 + }, + + // attach an event for an element + // (element, type, function) + add: function(event, body, d) { + if (event.addEventListener) return event.addEventListener(body, d,false) + if (event.attachEvent) return event.attachEvent('on'+body, d) + }, + + // kill an event of an element + end: function(e){ + if (window.event) { + window.event.cancelBubble = true + window.event.returnValue = false + return; + } + if (e.preventDefault && e.stopPropagation) { + e.preventDefault() + e.stopPropagation() + } + }, + + // move the scroll bar to the particular div. + scroll: function(d){ + i = window.innerHeight || document.documentElement.clientHeight; + h=document.body.scrollHeight; + a = Scroller.scrollTop() + if(d>a) + if(h-d>i) + a+=Math.ceil((d-a)/Scroller.speed) + else + a+=Math.ceil((d-a-(h-d))/Scroller.speed) + else + a = a+(d-a)/Scroller.speed; + window.scrollTo(0,a) + if(a==d || Scroller.offsetTop==a)clearInterval(Scroller.interval) + Scroller.offsetTop=a + }, + // initializer that adds the renderer to the onload function of the window + init: function(){ + Scroller.add(window,'load', Scroller.render) + }, + + // this method extracts all the anchors and validates then as # and attaches the events. + render: function(){ + a = document.getElementsByTagName('a'); + Scroller.end(this); + window.onscroll + for (i=0;i<a.length;i++) { + l = a[i]; + if(l.href && l.href.indexOf('#') != -1 && ((l.pathname==location.pathname) || ('/'+l.pathname==location.pathname)) ){ + Scroller.add(l,'click',Scroller.end) + l.onclick = function(){ + Scroller.end(this); + l=this.hash.substr(1); + a = document.getElementsByTagName('a'); + for (i=0;i<a.length;i++) { + if(a[i].name == l){ + clearInterval(Scroller.interval); + Scroller.interval=setInterval('Scroller.scroll('+Scroller.gy(a[i])+')',10); + } + } + } + } + } + } +} +// invoke the initializer of the scroller +Scroller.init(); + + +/*------------------------------------------------------------ + * END OF CODE +/*-----------------------------------------------------------*/
\ No newline at end of file |