| ///////////////////////////////////// |
| // ==== Tweens mini-engine v1.0 ==== |
| // Gerard Ferrandez |
| // http://www.dhteumeuleu.com |
| // last update: Oct 20, 2009 |
| // Licensed under CC-BY-NC |
| ///////////////////////////////////// |
| |
| var tweens = { |
| tweens: [], |
| nbTweens: 0, |
| add : function (obj, params) { |
| var self = this, |
| objList = [], |
| objReturn = []; |
| var anim = function () { |
| var i = -1, o; |
| while( o = self.tweens[++i] ) { |
| var cTime = (new Date() * 1) - o.start; |
| if (cTime < o.timeframe) { |
| for (var k in o.val) { |
| var m = o.val[k]; |
| o.obj[k] = Math.round(o.ease(m.from, m.to, cTime / o.timeframe)) + (o.cssMode ? 'px' : 0); |
| } |
| } else { |
| for (var k in o.val) { |
| var m = o.val[k]; |
| o.obj[k] = o.cssValue ? (Math.round(m.from + m.to) + 'px') : (m.from + m.to); |
| } |
| self.tweens.splice(i, 1); |
| self.nbTweens--; |
| if (o.onFinish) o.onFinish (o.params); |
| self.stop(); |
| } |
| if (!o.cssMode) o.obj.onTween(); |
| } |
| }; |
| if (typeof obj == "string" || !obj.length) objList.push(obj); else objList = obj; |
| for (var il = 0, l = objList.length; il < l; il++) { |
| var obj = document.getElementById(objList[il]) || objList[il]; |
| var o = {}; |
| o.val = {}; |
| o.cssMode = true; |
| o.o = obj; |
| o.obj = obj.style; |
| for (var k in params) { |
| var p = params[k]; |
| if (k === "cssMode") { |
| if (p === false) { |
| o.cssMode = false; |
| o.obj = obj; |
| } |
| } else if (k === "onTween") { |
| o.obj.onTween = p; |
| } else if (k === "init") { |
| for (var i in p) o.obj[i] = o.cssMode ? (Math.round(p[i]) + 'px') : p[i]; |
| } else if (k === "target") { |
| for (var i in p) { |
| var from = o.cssMode ? (parseInt(o.obj[i]) || 0) : (o.obj[i] || 0); |
| o.val[i] = { |
| from: from, |
| to: p[i] - from |
| }; |
| } |
| } else o[k] = params[k]; |
| } |
| if (!o.ease) o.ease = this.inOut; |
| if (!o.cssMode && params['init']) o.obj.onTween(); |
| if (o.duration) { |
| o.start = new Date() * 1; |
| o.end = o.start + o.duration; |
| o.timeframe = o.end - o.start; |
| this.tweens.push(o); |
| this.nbTweens++; |
| if (!this.running) this.running = window.setInterval(anim, 16); |
| } |
| objReturn.push(o); |
| } |
| return objReturn.length === 1 ? o : objReturn; |
| }, |
| stop : function () { |
| if (!this.nbTweens) { |
| window.clearInterval(this.running); |
| this.running = false; |
| } |
| }, |
| kill : function (obj) { |
| if (obj) { |
| for (var i = 0; i < this.nbTweens; i++) { |
| if (this.tweens[i] === obj || this.tweens[i].o === obj || this.tweens[i].o === document.getElementById(obj)) { |
| this.nbTweens--; |
| this.tweens.splice(i, 1); |
| this.stop(); |
| } |
| } |
| } |
| }, |
| reset : function () { |
| this.nbTweens = 0; |
| this.stop(); |
| while( this.tweens.length ) { |
| this.tweens.pop(); |
| } |
| }, |
| linear : function (f, t, d) { return t * d + f; }, |
| inOut : function (f, t, d) { return -t * .5 * (Math.cos(Math.PI * d) - 1) + f; } |
| } |
just awesome…………..:)