Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
YUI.add('anim-easing', function (Y, NAME) {
2
 
3
/*
4
TERMS OF USE - EASING EQUATIONS
5
Open source under the BSD License.
6
Copyright 2001 Robert Penner All rights reserved.
7
 
8
Redistribution and use in source and binary forms, with or without modification,
9
are permitted provided that the following conditions are met:
10
 
11
 * Redistributions of source code must retain the above copyright notice, this
12
    list of conditions and the following disclaimer.
13
 * Redistributions in binary form must reproduce the above copyright notice,
14
    this list of conditions and the following disclaimer in the documentation
15
    and/or other materials provided with the distribution.
16
 * Neither the name of the author nor the names of contributors may be used to
17
    endorse or promote products derived from this software without specific prior
18
    written permission.
19
 
20
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
24
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
29
OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
 
32
/**
33
 * The easing module provides methods for customizing
34
 * how an animation behaves during each run.
35
 * @class Easing
36
 * @module anim
37
 * @submodule anim-easing
38
 */
39
 
40
var Easing = {
41
 
42
    /**
43
     * Uniform speed between points.
44
     * @for Easing
45
     * @method easeNone
46
     * @param {Number} t Time value used to compute current value
47
     * @param {Number} b Starting value
48
     * @param {Number} c Delta between start and end values
49
     * @param {Number} d Total length of animation
50
     * @return {Number} The computed value for the current animation frame
51
     */
52
    easeNone: function (t, b, c, d) {
53
        return c*t/d + b;
54
    },
55
 
56
    /**
57
     * Begins slowly and accelerates towards end. (quadratic)
58
     * @method easeIn
59
     * @param {Number} t Time value used to compute current value
60
     * @param {Number} b Starting value
61
     * @param {Number} c Delta between start and end values
62
     * @param {Number} d Total length of animation
63
     * @return {Number} The computed value for the current animation frame
64
     */
65
    easeIn: function (t, b, c, d) {
66
        return c*(t/=d)*t + b;
67
    },
68
 
69
    /**
70
     * Begins quickly and decelerates towards end.  (quadratic)
71
     * @method easeOut
72
     * @param {Number} t Time value used to compute current value
73
     * @param {Number} b Starting value
74
     * @param {Number} c Delta between start and end values
75
     * @param {Number} d Total length of animation
76
     * @return {Number} The computed value for the current animation frame
77
     */
78
    easeOut: function (t, b, c, d) {
79
        return -c *(t/=d)*(t-2) + b;
80
    },
81
 
82
    /**
83
     * Begins slowly and decelerates towards end. (quadratic)
84
     * @method easeBoth
85
     * @param {Number} t Time value used to compute current value
86
     * @param {Number} b Starting value
87
     * @param {Number} c Delta between start and end values
88
     * @param {Number} d Total length of animation
89
     * @return {Number} The computed value for the current animation frame
90
     */
91
    easeBoth: function (t, b, c, d) {
92
        if ((t /= d/2) < 1) {
93
            return c/2*t*t + b;
94
        }
95
 
96
        return -c/2 * ((--t)*(t-2) - 1) + b;
97
    },
98
 
99
    /**
100
     * Begins slowly and accelerates towards end. (quartic)
101
     * @method easeInStrong
102
     * @param {Number} t Time value used to compute current value
103
     * @param {Number} b Starting value
104
     * @param {Number} c Delta between start and end values
105
     * @param {Number} d Total length of animation
106
     * @return {Number} The computed value for the current animation frame
107
     */
108
    easeInStrong: function (t, b, c, d) {
109
        return c*(t/=d)*t*t*t + b;
110
    },
111
 
112
    /**
113
     * Begins quickly and decelerates towards end.  (quartic)
114
     * @method easeOutStrong
115
     * @param {Number} t Time value used to compute current value
116
     * @param {Number} b Starting value
117
     * @param {Number} c Delta between start and end values
118
     * @param {Number} d Total length of animation
119
     * @return {Number} The computed value for the current animation frame
120
     */
121
    easeOutStrong: function (t, b, c, d) {
122
        return -c * ((t=t/d-1)*t*t*t - 1) + b;
123
    },
124
 
125
    /**
126
     * Begins slowly and decelerates towards end. (quartic)
127
     * @method easeBothStrong
128
     * @param {Number} t Time value used to compute current value
129
     * @param {Number} b Starting value
130
     * @param {Number} c Delta between start and end values
131
     * @param {Number} d Total length of animation
132
     * @return {Number} The computed value for the current animation frame
133
     */
134
    easeBothStrong: function (t, b, c, d) {
135
        if ((t /= d/2) < 1) {
136
            return c/2*t*t*t*t + b;
137
        }
138
 
139
        return -c/2 * ((t-=2)*t*t*t - 2) + b;
140
    },
141
 
142
    /**
143
     * Snap in elastic effect.
144
     * @method elasticIn
145
     * @param {Number} t Time value used to compute current value
146
     * @param {Number} b Starting value
147
     * @param {Number} c Delta between start and end values
148
     * @param {Number} d Total length of animation
149
     * @param {Number} a Amplitude (optional)
150
     * @param {Number} p Period (optional)
151
     * @return {Number} The computed value for the current animation frame
152
     */
153
 
154
    elasticIn: function (t, b, c, d, a, p) {
155
        var s;
156
        if (t === 0) {
157
            return b;
158
        }
159
        if ( (t /= d) === 1 ) {
160
            return b+c;
161
        }
162
        if (!p) {
163
            p = d* 0.3;
164
        }
165
 
166
        if (!a || a < Math.abs(c)) {
167
            a = c;
168
            s = p/4;
169
        }
170
        else {
171
            s = p/(2*Math.PI) * Math.asin (c/a);
172
        }
173
 
174
        return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
175
    },
176
 
177
    /**
178
     * Snap out elastic effect.
179
     * @method elasticOut
180
     * @param {Number} t Time value used to compute current value
181
     * @param {Number} b Starting value
182
     * @param {Number} c Delta between start and end values
183
     * @param {Number} d Total length of animation
184
     * @param {Number} a Amplitude (optional)
185
     * @param {Number} p Period (optional)
186
     * @return {Number} The computed value for the current animation frame
187
     */
188
    elasticOut: function (t, b, c, d, a, p) {
189
        var s;
190
        if (t === 0) {
191
            return b;
192
        }
193
        if ( (t /= d) === 1 ) {
194
            return b+c;
195
        }
196
        if (!p) {
197
            p=d * 0.3;
198
        }
199
 
200
        if (!a || a < Math.abs(c)) {
201
            a = c;
202
            s = p / 4;
203
        }
204
        else {
205
            s = p/(2*Math.PI) * Math.asin (c/a);
206
        }
207
 
208
        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
209
    },
210
 
211
    /**
212
     * Snap both elastic effect.
213
     * @method elasticBoth
214
     * @param {Number} t Time value used to compute current value
215
     * @param {Number} b Starting value
216
     * @param {Number} c Delta between start and end values
217
     * @param {Number} d Total length of animation
218
     * @param {Number} a Amplitude (optional)
219
     * @param {Number} p Period (optional)
220
     * @return {Number} The computed value for the current animation frame
221
     */
222
    elasticBoth: function (t, b, c, d, a, p) {
223
        var s;
224
        if (t === 0) {
225
            return b;
226
        }
227
 
228
        if ( (t /= d/2) === 2 ) {
229
            return b+c;
230
        }
231
 
232
        if (!p) {
233
            p = d*(0.3*1.5);
234
        }
235
 
236
        if ( !a || a < Math.abs(c) ) {
237
            a = c;
238
            s = p/4;
239
        }
240
        else {
241
            s = p/(2*Math.PI) * Math.asin (c/a);
242
        }
243
 
244
        if (t < 1) {
245
            return -0.5*(a*Math.pow(2,10*(t-=1)) *
246
                    Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
247
        }
248
        return a*Math.pow(2,-10*(t-=1)) *
249
                Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b;
250
    },
251
 
252
 
253
    /**
254
     * Backtracks slightly, then reverses direction and moves to end.
255
     * @method backIn
256
     * @param {Number} t Time value used to compute current value
257
     * @param {Number} b Starting value
258
     * @param {Number} c Delta between start and end values
259
     * @param {Number} d Total length of animation
260
     * @param {Number} s Overshoot (optional)
261
     * @return {Number} The computed value for the current animation frame
262
     */
263
    backIn: function (t, b, c, d, s) {
264
        if (s === undefined) {
265
            s = 1.70158;
266
        }
267
        if (t === d) {
268
            t -= 0.001;
269
        }
270
        return c*(t/=d)*t*((s+1)*t - s) + b;
271
    },
272
 
273
    /**
274
     * Overshoots end, then reverses and comes back to end.
275
     * @method backOut
276
     * @param {Number} t Time value used to compute current value
277
     * @param {Number} b Starting value
278
     * @param {Number} c Delta between start and end values
279
     * @param {Number} d Total length of animation
280
     * @param {Number} s Overshoot (optional)
281
     * @return {Number} The computed value for the current animation frame
282
     */
283
    backOut: function (t, b, c, d, s) {
284
        if (typeof s === 'undefined') {
285
            s = 1.70158;
286
        }
287
        return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
288
    },
289
 
290
    /**
291
     * Backtracks slightly, then reverses direction, overshoots end,
292
     * then reverses and comes back to end.
293
     * @method backBoth
294
     * @param {Number} t Time value used to compute current value
295
     * @param {Number} b Starting value
296
     * @param {Number} c Delta between start and end values
297
     * @param {Number} d Total length of animation
298
     * @param {Number} s Overshoot (optional)
299
     * @return {Number} The computed value for the current animation frame
300
     */
301
    backBoth: function (t, b, c, d, s) {
302
        if (typeof s === 'undefined') {
303
            s = 1.70158;
304
        }
305
 
306
        if ((t /= d/2 ) < 1) {
307
            return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
308
        }
309
        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
310
    },
311
 
312
    /**
313
     * Bounce off of start.
314
     * @method bounceIn
315
     * @param {Number} t Time value used to compute current value
316
     * @param {Number} b Starting value
317
     * @param {Number} c Delta between start and end values
318
     * @param {Number} d Total length of animation
319
     * @return {Number} The computed value for the current animation frame
320
     */
321
    bounceIn: function (t, b, c, d) {
322
        return c - Y.Easing.bounceOut(d-t, 0, c, d) + b;
323
    },
324
 
325
    /**
326
     * Bounces off end.
327
     * @method bounceOut
328
     * @param {Number} t Time value used to compute current value
329
     * @param {Number} b Starting value
330
     * @param {Number} c Delta between start and end values
331
     * @param {Number} d Total length of animation
332
     * @return {Number} The computed value for the current animation frame
333
     */
334
    bounceOut: function (t, b, c, d) {
335
        if ((t/=d) < (1/2.75)) {
336
                return c*(7.5625*t*t) + b;
337
        } else if (t < (2/2.75)) {
338
                return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b;
339
        } else if (t < (2.5/2.75)) {
340
                return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b;
341
        }
342
        return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b;
343
    },
344
 
345
    /**
346
     * Bounces off start and end.
347
     * @method bounceBoth
348
     * @param {Number} t Time value used to compute current value
349
     * @param {Number} b Starting value
350
     * @param {Number} c Delta between start and end values
351
     * @param {Number} d Total length of animation
352
     * @return {Number} The computed value for the current animation frame
353
     */
354
    bounceBoth: function (t, b, c, d) {
355
        if (t < d/2) {
356
            return Y.Easing.bounceIn(t * 2, 0, c, d) * 0.5 + b;
357
        }
358
        return Y.Easing.bounceOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;
359
    }
360
};
361
 
362
Y.Easing = Easing;
363
 
364
 
365
}, '3.18.1', {"requires": ["anim-base"]});