/* dw_glider.js - requires dw_lib.js glide to maintain window location on scroll version date: September 2003 This code is from Dynamic Web Coding at www.dyn-web.com See Terms of Use at http://www.dyn-web.com/bus/terms.html Permission granted to use this code as long as this entire notice is included. Resources: ypChaser by Aaron Boodman (www.youngpup.net) DHTML chaser tutorial at DHTML Lab - www.webreference.com/dhtml */ Glider.holder = []; function Glider(id,x,y,w,h,d,ac) { this.glideDur = d || 1000; this.origX = x; this.origY = y; this.ac = -ac || 0; this.baseObj = dynObj; this.baseObj(id,x,y,w,h); Glider.holder[Glider.holder.length] = this; if (!Glider.winHt) Glider.winHt = getWinHeight(); } Glider.prototype = new dynObj; Glider.prototype.onGlideInit = function () {} Glider.prototype.checkGlider = function() { var destY = getScrollY() + this.origY; if (destY != this.y) { if (destY != this.dy) { this.dy = destY; this.glideInit(); this.onGlideInit(); } this.glide(); } } Glider.prototype.glideInit = function() { this.gt = new Date().getTime(); var distY = this.dy - this.y; if ( Math.abs(distY) > Glider.winHt ) { // distance greater than window height? this.gsy = (distY > 0)? this.dy - Glider.winHt: this.dy + Glider.winHt; } else this.gsy = this.y; this.g_yc1 = this.gsy + ( (1+this.ac) * (this.dy - this.gsy)/3 ); this.g_yc2 = this.gsy + ( (2+this.ac) * (this.dy - this.gsy)/3 ); } Glider.prototype.glide = function() { var elapsed = new Date().getTime() - this.gt; if (elapsed < this.glideDur) { var y = dw_Bezier.getValue( elapsed/this.glideDur, this.gsy, this.dy, this.g_yc1, this.g_yc2 ); this.shiftTo(null,y); } else this.shiftTo(null,this.dy); } Glider.control = function() { for (var i=0; Glider.holder[i]; i++) { var curObj = Glider.holder[i]; if (curObj) curObj.checkGlider(); } } //Glider.timer = setInterval("Glider.control()",20); dw_Animation.add(Glider.control); // returns height of window function getWinHeight() { var winHt = 0; if (window.innerHeight) winHt = window.innerHeight-18; else if (document.documentElement && document.documentElement.clientHeight) winHt = document.documentElement.clientHeight; else if (document.body && document.body.clientHeight) winHt = document.body.clientHeight; return winHt; } // returns amount of vertical scroll function getScrollY() { var sy = 0; if (document.documentElement && document.documentElement.scrollTop) sy = document.documentElement.scrollTop; else if (document.body && document.body.scrollTop) sy = document.body.scrollTop; else if (window.pageYOffset) sy = window.pageYOffset; else if (window.scrollY) sy = window.scrollY; return sy; } // onresize, get window height if (window.addEventListener) window.addEventListener("resize", function(){ Glider.winHt = getWinHeight(); }, "false"); else if (window.attachEvent) window.attachEvent("onresize", function(){ Glider.winHt = getWinHeight(); } );