]>
Commit | Line | Data |
---|---|---|
59c06b17 CS |
1 | /* |
2 | moo.fx, simple effects library built with prototype.js (http://prototype.conio.net). | |
3 | by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE. | |
4 | for more info (http://moofx.mad4milk.net). | |
5 | 10/24/2005 | |
6 | v(1.0.2) | |
7 | */ | |
8 | ||
9 | //base | |
10 | var fx = new Object(); | |
11 | fx.Base = function(){}; | |
12 | fx.Base.prototype = { | |
13 | setOptions: function(options) { | |
14 | this.options = { | |
15 | duration: 500, | |
16 | onComplete: '' | |
17 | } | |
18 | Object.extend(this.options, options || {}); | |
19 | }, | |
20 | ||
21 | go: function() { | |
22 | this.duration = this.options.duration; | |
23 | this.startTime = (new Date).getTime(); | |
24 | this.timer = setInterval (this.step.bind(this), 13); | |
25 | }, | |
26 | ||
27 | step: function() { | |
28 | var time = (new Date).getTime(); | |
29 | var Tpos = (time - this.startTime) / (this.duration); | |
30 | if (time >= this.duration+this.startTime) { | |
31 | this.now = this.to; | |
32 | clearInterval (this.timer); | |
33 | this.timer = null; | |
34 | if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10); | |
35 | } | |
36 | else { | |
37 | this.now = ((-Math.cos(Tpos*Math.PI)/2) + 0.5) * (this.to-this.from) + this.from; | |
38 | //this time-position, sinoidal transition thing is from script.aculo.us | |
39 | } | |
40 | this.increase(); | |
41 | }, | |
42 | ||
43 | custom: function(from, to) { | |
44 | if (this.timer != null) return; | |
45 | this.from = from; | |
46 | this.to = to; | |
47 | this.go(); | |
48 | }, | |
49 | ||
50 | hide: function() { | |
51 | this.now = 0; | |
52 | this.increase(); | |
53 | }, | |
54 | ||
55 | clearTimer: function() { | |
56 | clearInterval(this.timer); | |
57 | this.timer = null; | |
58 | } | |
59 | } | |
60 | ||
61 | //stretchers | |
62 | fx.Layout = Class.create(); | |
63 | fx.Layout.prototype = Object.extend(new fx.Base(), { | |
64 | initialize: function(el, options) { | |
65 | this.el = $(el); | |
66 | this.el.style.overflow = "hidden"; | |
67 | this.el.iniWidth = this.el.offsetWidth; | |
68 | this.el.iniHeight = this.el.offsetHeight; | |
69 | this.setOptions(options); | |
70 | } | |
71 | }); | |
72 | ||
73 | fx.Height = Class.create(); | |
74 | Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), { | |
75 | increase: function() { | |
76 | this.el.style.height = this.now + "px"; | |
77 | }, | |
78 | ||
79 | toggle: function() { | |
80 | if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0); | |
81 | else this.custom(0, this.el.scrollHeight); | |
82 | } | |
83 | }); |