3 * Portions of this file are based on pieces of Yahoo User Interface Library
4 * Copyright (c) 2007, Yahoo! Inc. All rights reserved.
5 * YUI licensed under the BSD License:
6 * http://developer.yahoo.net/yui/license.txt
7 * <script type="text/javascript">
11 Roo.lib.AnimMgr = new function() {
28 this.registerElement = function(tween) {
29 queue[queue.length] = tween;
31 tween._onStart.fire();
36 this.unRegister = function(tween, index) {
37 tween._onComplete.fire();
38 index = index || getIndex(tween);
40 queue.splice(index, 1);
44 if (tweenCount <= 0) {
50 this.start = function() {
51 if (thread === null) {
52 thread = setInterval(this.run, this.delay);
57 this.stop = function(tween) {
59 clearInterval(thread);
61 for (var i = 0, len = queue.length; i < len; ++i) {
62 if (queue[0].isAnimated()) {
63 this.unRegister(queue[0], 0);
72 this.unRegister(tween);
77 this.run = function() {
78 for (var i = 0, len = queue.length; i < len; ++i) {
80 if (!tween || !tween.isAnimated()) {
84 if (tween.currentFrame < tween.totalFrames || tween.totalFrames === null)
86 tween.currentFrame += 1;
88 if (tween.useSeconds) {
91 tween._onTween.fire();
94 Roo.lib.AnimMgr.stop(tween, i);
99 var getIndex = function(anim) {
100 for (var i = 0, len = queue.length; i < len; ++i) {
101 if (queue[i] == anim) {
109 var correctFrame = function(tween) {
110 var frames = tween.totalFrames;
111 var frame = tween.currentFrame;
112 var expected = (tween.currentFrame * tween.duration * 1000 / tween.totalFrames);
113 var elapsed = (new Date() - tween.getStartTime());
116 if (elapsed < tween.duration * 1000) {
117 tweak = Math.round((elapsed / expected - 1) * tween.currentFrame);
119 tweak = frames - (frame + 1);
121 if (tweak > 0 && isFinite(tweak)) {
122 if (tween.currentFrame + tweak >= frames) {
123 tweak = frames - (frame + 1);
126 tween.currentFrame += tweak;