/************************************************************************* This code is from Dynamic Web Coding at www.dyn-web.com Copyright 2003-4 by Sharon Paine See Terms of Use at www.dyn-web.com/bus/terms.html regarding conditions under which you may use this code. This notice must be retained in the code as is! *************************************************************************/ /* dw_glide.js - requires dw_lib.js version date July 2004 */ // acc is number between -1 and 1 ( -1 full decelerated, 1 full accelerated, 0 linear, i.e. no acceleration) dynObj.prototype.slideTo = function (destX,destY,slideDur,acc,endFn) { if (!document.getElementById) return; this.slideDur = slideDur || .0001; var acc = -acc || 0; if (endFn) this.onSlideEnd = endFn; // hold destination values (check for movement on 1 axis only) if (destX == null) this.destX = this.x; else this.destX = destX; if (destY == null) this.destY = this.y; else this.destY = destY; this.startX = this.x; this.startY = this.y; this.st = new Date().getTime(); // control points for bezier-controlled slide (see www.youngpup.net accelimation) this.xc1 = this.x + ( (1+acc) * (this.destX-this.x)/3 ); this.xc2 = this.x + ( (2+acc) * (this.destX-this.x)/3 ); this.yc1 = this.y + ( (1+acc) * (this.destY-this.y)/3 ); this.yc2 = this.y + ( (2+acc) * (this.destY-this.y)/3 ); this.sliding = true; this.onSlideStart(); dw_Animation.add(this.animString + ".doSlide()"); } dynObj.prototype.doSlide = function() { if (!this.sliding) return; var elapsed = new Date().getTime() - this.st; if (elapsed < this.slideDur) { var x = dw_Bezier.getValue(elapsed/this.slideDur, this.startX, this.destX, this.xc1, this.xc2); var y = dw_Bezier.getValue(elapsed/this.slideDur, this.startY, this.destY, this.yc1, this.yc2); this.shiftTo( Math.round(x) ,Math.round(y) ); this.onSlide(); } else { // if time's up dw_Animation.remove(this.animString + ".doSlide()"); this.shiftTo(this.destX,this.destY); this.onSlide(); this.sliding = false; this.onSlideEnd(); } } dynObj.prototype.slideBy = function(dx,dy,slideDur,acc,endFn) { var destX=this.x+dx; var destY=this.y+dy; this.slideTo(destX,destY,slideDur,acc,endFn); } dynObj.prototype.onSlideStart = function () {} dynObj.prototype.onSlide = function () {} dynObj.prototype.onSlideEnd = function () { if (this.el) this.el = null; }