-
Notifications
You must be signed in to change notification settings - Fork 0
/
animation.js
73 lines (72 loc) · 2.35 KB
/
animation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function Animation(el, io){
var This = this;
this.element = new Element(el, io);
var next = function(){ };
var args = false;
this.update = function() {
var t = This.trans( This.time.getTime() / This.dur );
if(isNum(da)){
var na = oa + (t * da);
This.element.setOpacity(na);
}
if(isNum(dx) || isNum(dy)){
var nx = ox + t * dx;
var ny = oy + t * dy;
This.element.setPosition(nx, ny);
}
if(isNum(dw) || isNum(dh)){
var nw = ow + (t * dw);
var nh = oh + (t * dh);
if(This.element.center){
var cx = (This.element.width - nw) * This.element.center.x;
var cy = (This.element.height - nh) * This.element.center.y;
This.element.setPosition( This.element.x + cx, This.element.y + cy);
}
This.element.setDimensions(nw, nh);
}
if(observer) observer();
if(t == 1){
//finish any lame miscalculations
if(isNum(_effect.y)) This.element.element.style.top = _effect.y;
if(isNum(_effect.x)) This.element.element.style.left = _effect.x;
this.complete = true;
try{ next(args);
next = new function(){};
}catch(e){ }
}
}
var _effect;
var oa; var ox; var oy; var ow; var oh;
var da; var dx; var dy; var dw; var dh;
this.effect = function(fect, after, afterArgs){
_effect = fect;
if(fect.duration) This.dur = fect.duration;
if(fect.fps) This.fps = fect.fps;
if(fect.trans) This.trans = fect.trans;
if(after) next = after;
if(afterArgs) args = afterArgs;
if(isNum(fect.alpha)){ oa = This.element.alpha; da = fect.alpha - oa; }
if(isNum(fect.width)){ ow = This.element.width; dw = fect.width - ow; }
if(isNum(fect.height)){ oh = This.element.height; dh = fect.height - oh; }
if(isNum(fect.x)){ ox = This.element.x; dx = fect.x - ox; }
if(isNum(fect.y)){ oy = This.element.y; dy = fect.y - oy; }
this.complete = false;
this.time.reset();
this.time.start(This.dur, This.fps);
}
var observer = false
this.setUpdateObserver= function(obj){ observer = obj; }
this.linear = function(x){ return x; }
if(!io) io = { };
this.time = new Timer(this.dur, this.fps, this.update);
this.trans = (!io.trans) ? this.linear : io.trans;
this.fps = (io.fps) ? io.fps : (1/24);
this.dur = (io.duration) ? io.duration : 1;
this.complete = true;
function isNum(val) {
if(val==0)
return true;
else if(typeof(val) == 'number');
return true;
return false; }
}