1 /** 2 * @fileOverview single timer for the whole anim module 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("anim/manager", function(S) { 6 var stamp = S.stamp; 7 8 return { 9 interval:15, 10 runnings:{}, 11 timer:null, 12 start:function(anim) { 13 var self = this, 14 kv = stamp(anim); 15 if (self.runnings[kv]) { 16 return; 17 } 18 self.runnings[kv] = anim; 19 self.startTimer(); 20 }, 21 stop:function(anim) { 22 this.notRun(anim); 23 }, 24 notRun:function(anim) { 25 var self = this, 26 kv = stamp(anim); 27 delete self.runnings[kv]; 28 if (S.isEmptyObject(self.runnings)) { 29 self.stopTimer(); 30 } 31 }, 32 pause:function(anim) { 33 this.notRun(anim); 34 }, 35 resume:function(anim) { 36 this.start(anim); 37 }, 38 startTimer:function() { 39 var self = this; 40 if (!self.timer) { 41 self.timer = setTimeout(function() { 42 if (!self.runFrames()) { 43 self.timer = 0; 44 self.startTimer(); 45 } else { 46 self.stopTimer(); 47 } 48 }, self.interval); 49 } 50 }, 51 stopTimer:function() { 52 var self = this, 53 t = self.timer; 54 if (t) { 55 clearTimeout(t); 56 self.timer = 0; 57 } 58 }, 59 runFrames:function() { 60 var self = this, 61 done = 1, 62 runnings = self.runnings; 63 for (var r in runnings) { 64 if (runnings.hasOwnProperty(r)) { 65 done = 0; 66 runnings[r]._frame(); 67 } 68 } 69 return done; 70 } 71 }; 72 });