annotate rhodecode/public/js/yui/animation/animation.js @ 677:469108c210f6 beta

Upgrade of Yui2, added selector rollup.
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 11 Nov 2010 01:40:59 +0000
parents 1e757ac98988
children 289ff43cc190
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2 Copyright (c) 2009, Yahoo! Inc. All rights reserved.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3 Code licensed under the BSD License:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4 http://developer.yahoo.net/yui/license.txt
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5 version: 2.8.0r4
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
8
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
9 var Y = YAHOO.util;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
10
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
11 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12 Copyright (c) 2006, Yahoo! Inc. All rights reserved.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
13 Code licensed under the BSD License:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14 http://developer.yahoo.net/yui/license.txt
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18 * The animation module provides allows effects to be added to HTMLElements.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
19 * @module animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
20 * @requires yahoo, event, dom
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
22
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
23 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
24 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
25 * Base animation class that provides the interface for building animated effects.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
26 * <p>Usage: var myAnim = new YAHOO.util.Anim(el, { width: { from: 10, to: 100 } }, 1, YAHOO.util.Easing.easeOut);</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
27 * @class Anim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
28 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
29 * @requires YAHOO.util.AnimMgr
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
30 * @requires YAHOO.util.Easing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
31 * @requires YAHOO.util.Dom
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
32 * @requires YAHOO.util.Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
33 * @requires YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
34 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
35 * @param {String | HTMLElement} el Reference to the element that will be animated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
36 * @param {Object} attributes The attribute(s) to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
37 * Each attribute is an object with at minimum a "to" or "by" member defined.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
38 * Additional optional members are "from" (defaults to current value), "units" (defaults to "px").
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
39 * All attribute names use camelCase.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
40 * @param {Number} duration (optional, defaults to 1 second) Length of animation (frames or seconds), defaults to time-based
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
41 * @param {Function} method (optional, defaults to YAHOO.util.Easing.easeNone) Computes the values that are applied to the attributes per frame (generally a YAHOO.util.Easing method)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
42 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
43
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
44 var Anim = function(el, attributes, duration, method) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
45 if (!el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
46 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
47 this.init(el, attributes, duration, method);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
48 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
49
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
50 Anim.NAME = 'Anim';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
51
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
52 Anim.prototype = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
53 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
54 * Provides a readable name for the Anim instance.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
55 * @method toString
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
56 * @return {String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
57 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
58 toString: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
59 var el = this.getEl() || {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
60 var id = el.id || el.tagName;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
61 return (this.constructor.NAME + ': ' + id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
62 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
63
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
64 patterns: { // cached for performance
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
65 noNegatives: /width|height|opacity|padding/i, // keep at zero or above
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
66 offsetAttribute: /^((width|height)|(top|left))$/, // use offsetValue as default
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
67 defaultUnit: /width|height|top$|bottom$|left$|right$/i, // use 'px' by default
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
68 offsetUnit: /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i // IE may return these, so convert these to offset
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
69 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
70
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
71 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
72 * Returns the value computed by the animation's "method".
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
73 * @method doMethod
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
74 * @param {String} attr The name of the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
75 * @param {Number} start The value this attribute should start from for this animation.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
76 * @param {Number} end The value this attribute should end at for this animation.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
77 * @return {Number} The Value to be applied to the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
78 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
79 doMethod: function(attr, start, end) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
80 return this.method(this.currentFrame, start, end - start, this.totalFrames);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
81 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
82
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
83 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
84 * Applies a value to an attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
85 * @method setAttribute
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
86 * @param {String} attr The name of the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
87 * @param {Number} val The value to be applied to the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
88 * @param {String} unit The unit ('px', '%', etc.) of the value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
89 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
90 setAttribute: function(attr, val, unit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
91 var el = this.getEl();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
92 if ( this.patterns.noNegatives.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
93 val = (val > 0) ? val : 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
94 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
95
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
96 if (attr in el && !('style' in el && attr in el.style)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
97 el[attr] = val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
98 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
99 Y.Dom.setStyle(el, attr, val + unit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
100 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
101 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
102
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
103 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
104 * Returns current value of the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
105 * @method getAttribute
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
106 * @param {String} attr The name of the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
107 * @return {Number} val The current value of the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
108 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
109 getAttribute: function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
110 var el = this.getEl();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
111 var val = Y.Dom.getStyle(el, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
112
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
113 if (val !== 'auto' && !this.patterns.offsetUnit.test(val)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
114 return parseFloat(val);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
115 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
116
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
117 var a = this.patterns.offsetAttribute.exec(attr) || [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
118 var pos = !!( a[3] ); // top or left
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
119 var box = !!( a[2] ); // width or height
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
120
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
121 if ('style' in el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
122 // use offsets for width/height and abs pos top/left
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
123 if ( box || (Y.Dom.getStyle(el, 'position') == 'absolute' && pos) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
124 val = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
125 } else { // default to zero for other 'auto'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
126 val = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
127 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
128 } else if (attr in el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
129 val = el[attr];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
130 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
131
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
132 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
133 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
134
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
135 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
136 * Returns the unit to use when none is supplied.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
137 * @method getDefaultUnit
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
138 * @param {attr} attr The name of the attribute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
139 * @return {String} The default unit to be used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
140 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
141 getDefaultUnit: function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
142 if ( this.patterns.defaultUnit.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
143 return 'px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
144 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
145
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
146 return '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
147 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
148
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
149 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
150 * Sets the actual values to be used during the animation. Should only be needed for subclass use.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
151 * @method setRuntimeAttribute
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
152 * @param {Object} attr The attribute object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
153 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
154 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
155 setRuntimeAttribute: function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
156 var start;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
157 var end;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
158 var attributes = this.attributes;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
159
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
160 this.runtimeAttributes[attr] = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
161
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
162 var isset = function(prop) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
163 return (typeof prop !== 'undefined');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
164 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
165
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
166 if ( !isset(attributes[attr]['to']) && !isset(attributes[attr]['by']) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
167 return false; // note return; nothing to animate to
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
168 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
169
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
170 start = ( isset(attributes[attr]['from']) ) ? attributes[attr]['from'] : this.getAttribute(attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
171
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
172 // To beats by, per SMIL 2.1 spec
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
173 if ( isset(attributes[attr]['to']) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
174 end = attributes[attr]['to'];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
175 } else if ( isset(attributes[attr]['by']) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
176 if (start.constructor == Array) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
177 end = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
178 for (var i = 0, len = start.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
179 end[i] = start[i] + attributes[attr]['by'][i] * 1; // times 1 to cast "by"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
180 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
181 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
182 end = start + attributes[attr]['by'] * 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
183 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
184 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
185
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
186 this.runtimeAttributes[attr].start = start;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
187 this.runtimeAttributes[attr].end = end;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
188
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
189 // set units if needed
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
190 this.runtimeAttributes[attr].unit = ( isset(attributes[attr].unit) ) ?
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
191 attributes[attr]['unit'] : this.getDefaultUnit(attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
192 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
193 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
194
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
195 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
196 * Constructor for Anim instance.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
197 * @method init
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
198 * @param {String | HTMLElement} el Reference to the element that will be animated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
199 * @param {Object} attributes The attribute(s) to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
200 * Each attribute is an object with at minimum a "to" or "by" member defined.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
201 * Additional optional members are "from" (defaults to current value), "units" (defaults to "px").
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
202 * All attribute names use camelCase.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
203 * @param {Number} duration (optional, defaults to 1 second) Length of animation (frames or seconds), defaults to time-based
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
204 * @param {Function} method (optional, defaults to YAHOO.util.Easing.easeNone) Computes the values that are applied to the attributes per frame (generally a YAHOO.util.Easing method)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
205 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
206 init: function(el, attributes, duration, method) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
207 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
208 * Whether or not the animation is running.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
209 * @property isAnimated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
210 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
211 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
212 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
213 var isAnimated = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
214
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
215 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
216 * A Date object that is created when the animation begins.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
217 * @property startTime
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
218 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
219 * @type Date
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
220 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
221 var startTime = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
222
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
223 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
224 * The number of frames this animation was able to execute.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
225 * @property actualFrames
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
226 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
227 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
228 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
229 var actualFrames = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
230
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
231 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
232 * The element to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
233 * @property el
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
234 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
235 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
236 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
237 el = Y.Dom.get(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
238
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
239 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
240 * The collection of attributes to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
241 * Each attribute must have at least a "to" or "by" defined in order to animate.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
242 * If "to" is supplied, the animation will end with the attribute at that value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
243 * If "by" is supplied, the animation will end at that value plus its starting value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
244 * If both are supplied, "to" is used, and "by" is ignored.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
245 * Optional additional member include "from" (the value the attribute should start animating from, defaults to current value), and "unit" (the units to apply to the values).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
246 * @property attributes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
247 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
248 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
249 this.attributes = attributes || {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
250
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
251 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
252 * The length of the animation. Defaults to "1" (second).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
253 * @property duration
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
254 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
255 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
256 this.duration = !YAHOO.lang.isUndefined(duration) ? duration : 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
257
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
258 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
259 * The method that will provide values to the attribute(s) during the animation.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
260 * Defaults to "YAHOO.util.Easing.easeNone".
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
261 * @property method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
262 * @type Function
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
263 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
264 this.method = method || Y.Easing.easeNone;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
265
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
266 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
267 * Whether or not the duration should be treated as seconds.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
268 * Defaults to true.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
269 * @property useSeconds
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
270 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
271 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
272 this.useSeconds = true; // default to seconds
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
273
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
274 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
275 * The location of the current animation on the timeline.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
276 * In time-based animations, this is used by AnimMgr to ensure the animation finishes on time.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
277 * @property currentFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
278 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
279 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
280 this.currentFrame = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
281
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
282 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
283 * The total number of frames to be executed.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
284 * In time-based animations, this is used by AnimMgr to ensure the animation finishes on time.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
285 * @property totalFrames
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
286 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
287 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
288 this.totalFrames = Y.AnimMgr.fps;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
289
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
290 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
291 * Changes the animated element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
292 * @method setEl
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
293 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
294 this.setEl = function(element) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
295 el = Y.Dom.get(element);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
296 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
297
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
298 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
299 * Returns a reference to the animated element.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
300 * @method getEl
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
301 * @return {HTMLElement}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
302 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
303 this.getEl = function() { return el; };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
304
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
305 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
306 * Checks whether the element is currently animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
307 * @method isAnimated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
308 * @return {Boolean} current value of isAnimated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
309 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
310 this.isAnimated = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
311 return isAnimated;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
312 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
313
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
314 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
315 * Returns the animation start time.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
316 * @method getStartTime
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
317 * @return {Date} current value of startTime.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
318 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
319 this.getStartTime = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
320 return startTime;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
321 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
322
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
323 this.runtimeAttributes = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
324
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
325
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
326
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
327 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
328 * Starts the animation by registering it with the animation manager.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
329 * @method animate
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
330 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
331 this.animate = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
332 if ( this.isAnimated() ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
333 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
334 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
335
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
336 this.currentFrame = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
337
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
338 this.totalFrames = ( this.useSeconds ) ? Math.ceil(Y.AnimMgr.fps * this.duration) : this.duration;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
339
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
340 if (this.duration === 0 && this.useSeconds) { // jump to last frame if zero second duration
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
341 this.totalFrames = 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
342 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
343 Y.AnimMgr.registerElement(this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
344 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
345 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
346
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
347 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
348 * Stops the animation. Normally called by AnimMgr when animation completes.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
349 * @method stop
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
350 * @param {Boolean} finish (optional) If true, animation will jump to final frame.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
351 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
352 this.stop = function(finish) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
353 if (!this.isAnimated()) { // nothing to stop
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
354 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
355 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
356
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
357 if (finish) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
358 this.currentFrame = this.totalFrames;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
359 this._onTween.fire();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
360 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
361 Y.AnimMgr.stop(this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
362 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
363
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
364 var onStart = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
365 this.onStart.fire();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
366
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
367 this.runtimeAttributes = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
368 for (var attr in this.attributes) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
369 this.setRuntimeAttribute(attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
370 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
371
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
372 isAnimated = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
373 actualFrames = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
374 startTime = new Date();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
375 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
376
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
377 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
378 * Feeds the starting and ending values for each animated attribute to doMethod once per frame, then applies the resulting value to the attribute(s).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
379 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
380 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
381
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
382 var onTween = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
383 var data = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
384 duration: new Date() - this.getStartTime(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
385 currentFrame: this.currentFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
386 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
387
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
388 data.toString = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
389 return (
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
390 'duration: ' + data.duration +
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
391 ', currentFrame: ' + data.currentFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
392 );
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
393 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
394
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
395 this.onTween.fire(data);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
396
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
397 var runtimeAttributes = this.runtimeAttributes;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
398
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
399 for (var attr in runtimeAttributes) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
400 this.setAttribute(attr, this.doMethod(attr, runtimeAttributes[attr].start, runtimeAttributes[attr].end), runtimeAttributes[attr].unit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
401 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
402
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
403 actualFrames += 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
404 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
405
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
406 var onComplete = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
407 var actual_duration = (new Date() - startTime) / 1000 ;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
408
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
409 var data = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
410 duration: actual_duration,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
411 frames: actualFrames,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
412 fps: actualFrames / actual_duration
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
413 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
414
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
415 data.toString = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
416 return (
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
417 'duration: ' + data.duration +
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
418 ', frames: ' + data.frames +
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
419 ', fps: ' + data.fps
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
420 );
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
421 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
422
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
423 isAnimated = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
424 actualFrames = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
425 this.onComplete.fire(data);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
426 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
427
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
428 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
429 * Custom event that fires after onStart, useful in subclassing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
430 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
431 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
432 this._onStart = new Y.CustomEvent('_start', this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
433
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
434 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
435 * Custom event that fires when animation begins
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
436 * Listen via subscribe method (e.g. myAnim.onStart.subscribe(someFunction)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
437 * @event onStart
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
438 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
439 this.onStart = new Y.CustomEvent('start', this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
440
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
441 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
442 * Custom event that fires between each frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
443 * Listen via subscribe method (e.g. myAnim.onTween.subscribe(someFunction)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
444 * @event onTween
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
445 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
446 this.onTween = new Y.CustomEvent('tween', this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
447
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
448 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
449 * Custom event that fires after onTween
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
450 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
451 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
452 this._onTween = new Y.CustomEvent('_tween', this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
453
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
454 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
455 * Custom event that fires when animation ends
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
456 * Listen via subscribe method (e.g. myAnim.onComplete.subscribe(someFunction)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
457 * @event onComplete
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
458 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
459 this.onComplete = new Y.CustomEvent('complete', this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
460 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
461 * Custom event that fires after onComplete
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
462 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
463 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
464 this._onComplete = new Y.CustomEvent('_complete', this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
465
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
466 this._onStart.subscribe(onStart);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
467 this._onTween.subscribe(onTween);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
468 this._onComplete.subscribe(onComplete);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
469 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
470 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
471
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
472 Y.Anim = Anim;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
473 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
474 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
475 * Handles animation queueing and threading.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
476 * Used by Anim and subclasses.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
477 * @class AnimMgr
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
478 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
479 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
480 YAHOO.util.AnimMgr = new function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
481 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
482 * Reference to the animation Interval.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
483 * @property thread
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
484 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
485 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
486 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
487 var thread = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
488
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
489 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
490 * The current queue of registered animation objects.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
491 * @property queue
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
492 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
493 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
494 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
495 var queue = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
496
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
497 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
498 * The number of active animations.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
499 * @property tweenCount
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
500 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
501 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
502 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
503 var tweenCount = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
504
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
505 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
506 * Base frame rate (frames per second).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
507 * Arbitrarily high for better x-browser calibration (slower browsers drop more frames).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
508 * @property fps
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
509 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
510 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
511 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
512 this.fps = 1000;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
513
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
514 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
515 * Interval delay in milliseconds, defaults to fastest possible.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
516 * @property delay
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
517 * @type Int
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
518 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
519 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
520 this.delay = 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
521
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
522 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
523 * Adds an animation instance to the animation queue.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
524 * All animation instances must be registered in order to animate.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
525 * @method registerElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
526 * @param {object} tween The Anim instance to be be registered
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
527 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
528 this.registerElement = function(tween) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
529 queue[queue.length] = tween;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
530 tweenCount += 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
531 tween._onStart.fire();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
532 this.start();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
533 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
534
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
535 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
536 * removes an animation instance from the animation queue.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
537 * All animation instances must be registered in order to animate.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
538 * @method unRegister
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
539 * @param {object} tween The Anim instance to be be registered
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
540 * @param {Int} index The index of the Anim instance
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
541 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
542 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
543 this.unRegister = function(tween, index) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
544 index = index || getIndex(tween);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
545 if (!tween.isAnimated() || index === -1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
546 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
547 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
548
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
549 tween._onComplete.fire();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
550 queue.splice(index, 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
551
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
552 tweenCount -= 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
553 if (tweenCount <= 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
554 this.stop();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
555 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
556
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
557 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
558 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
559
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
560 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
561 * Starts the animation thread.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
562 * Only one thread can run at a time.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
563 * @method start
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
564 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
565 this.start = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
566 if (thread === null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
567 thread = setInterval(this.run, this.delay);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
568 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
569 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
570
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
571 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
572 * Stops the animation thread or a specific animation instance.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
573 * @method stop
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
574 * @param {object} tween A specific Anim instance to stop (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
575 * If no instance given, Manager stops thread and all animations.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
576 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
577 this.stop = function(tween) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
578 if (!tween) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
579 clearInterval(thread);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
580
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
581 for (var i = 0, len = queue.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
582 this.unRegister(queue[0], 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
583 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
584
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
585 queue = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
586 thread = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
587 tweenCount = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
588 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
589 else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
590 this.unRegister(tween);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
591 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
592 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
593
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
594 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
595 * Called per Interval to handle each animation frame.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
596 * @method run
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
597 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
598 this.run = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
599 for (var i = 0, len = queue.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
600 var tween = queue[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
601 if ( !tween || !tween.isAnimated() ) { continue; }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
602
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
603 if (tween.currentFrame < tween.totalFrames || tween.totalFrames === null)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
604 {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
605 tween.currentFrame += 1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
606
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
607 if (tween.useSeconds) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
608 correctFrame(tween);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
609 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
610 tween._onTween.fire();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
611 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
612 else { YAHOO.util.AnimMgr.stop(tween, i); }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
613 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
614 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
615
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
616 var getIndex = function(anim) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
617 for (var i = 0, len = queue.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
618 if (queue[i] === anim) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
619 return i; // note return;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
620 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
621 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
622 return -1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
623 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
624
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
625 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
626 * On the fly frame correction to keep animation on time.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
627 * @method correctFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
628 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
629 * @param {Object} tween The Anim instance being corrected.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
630 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
631 var correctFrame = function(tween) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
632 var frames = tween.totalFrames;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
633 var frame = tween.currentFrame;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
634 var expected = (tween.currentFrame * tween.duration * 1000 / tween.totalFrames);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
635 var elapsed = (new Date() - tween.getStartTime());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
636 var tweak = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
637
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
638 if (elapsed < tween.duration * 1000) { // check if falling behind
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
639 tweak = Math.round((elapsed / expected - 1) * tween.currentFrame);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
640 } else { // went over duration, so jump to end
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
641 tweak = frames - (frame + 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
642 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
643 if (tweak > 0 && isFinite(tweak)) { // adjust if needed
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
644 if (tween.currentFrame + tweak >= frames) {// dont go past last frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
645 tweak = frames - (frame + 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
646 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
647
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
648 tween.currentFrame += tweak;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
649 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
650 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
651 this._queue = queue;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
652 this._getIndex = getIndex;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
653 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
654 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
655 * Used to calculate Bezier splines for any number of control points.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
656 * @class Bezier
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
657 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
658 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
659 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
660 YAHOO.util.Bezier = new function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
661 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
662 * Get the current position of the animated element based on t.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
663 * Each point is an array of "x" and "y" values (0 = x, 1 = y)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
664 * At least 2 points are required (start and end).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
665 * First point is start. Last point is end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
666 * Additional control points are optional.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
667 * @method getPosition
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
668 * @param {Array} points An array containing Bezier points
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
669 * @param {Number} t A number between 0 and 1 which is the basis for determining current position
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
670 * @return {Array} An array containing int x and y member data
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
671 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
672 this.getPosition = function(points, t) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
673 var n = points.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
674 var tmp = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
675
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
676 for (var i = 0; i < n; ++i){
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
677 tmp[i] = [points[i][0], points[i][1]]; // save input
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
678 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
679
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
680 for (var j = 1; j < n; ++j) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
681 for (i = 0; i < n - j; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
682 tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
683 tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
684 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
685 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
686
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
687 return [ tmp[0][0], tmp[0][1] ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
688
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
689 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
690 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
691 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
692 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
693 * Anim subclass for color transitions.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
694 * <p>Usage: <code>var myAnim = new Y.ColorAnim(el, { backgroundColor: { from: '#FF0000', to: '#FFFFFF' } }, 1, Y.Easing.easeOut);</code> Color values can be specified with either 112233, #112233,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
695 * [255,255,255], or rgb(255,255,255)</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
696 * @class ColorAnim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
697 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
698 * @requires YAHOO.util.Anim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
699 * @requires YAHOO.util.AnimMgr
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
700 * @requires YAHOO.util.Easing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
701 * @requires YAHOO.util.Bezier
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
702 * @requires YAHOO.util.Dom
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
703 * @requires YAHOO.util.Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
704 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
705 * @extends YAHOO.util.Anim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
706 * @param {HTMLElement | String} el Reference to the element that will be animated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
707 * @param {Object} attributes The attribute(s) to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
708 * Each attribute is an object with at minimum a "to" or "by" member defined.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
709 * Additional optional members are "from" (defaults to current value), "units" (defaults to "px").
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
710 * All attribute names use camelCase.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
711 * @param {Number} duration (optional, defaults to 1 second) Length of animation (frames or seconds), defaults to time-based
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
712 * @param {Function} method (optional, defaults to YAHOO.util.Easing.easeNone) Computes the values that are applied to the attributes per frame (generally a YAHOO.util.Easing method)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
713 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
714 var ColorAnim = function(el, attributes, duration, method) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
715 ColorAnim.superclass.constructor.call(this, el, attributes, duration, method);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
716 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
717
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
718 ColorAnim.NAME = 'ColorAnim';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
719
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
720 ColorAnim.DEFAULT_BGCOLOR = '#fff';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
721 // shorthand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
722 var Y = YAHOO.util;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
723 YAHOO.extend(ColorAnim, Y.Anim);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
724
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
725 var superclass = ColorAnim.superclass;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
726 var proto = ColorAnim.prototype;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
727
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
728 proto.patterns.color = /color$/i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
729 proto.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
730 proto.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
731 proto.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
732 proto.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/; // need rgba for safari
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
733
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
734 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
735 * Attempts to parse the given string and return a 3-tuple.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
736 * @method parseColor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
737 * @param {String} s The string to parse.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
738 * @return {Array} The 3-tuple of rgb values.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
739 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
740 proto.parseColor = function(s) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
741 if (s.length == 3) { return s; }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
742
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
743 var c = this.patterns.hex.exec(s);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
744 if (c && c.length == 4) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
745 return [ parseInt(c[1], 16), parseInt(c[2], 16), parseInt(c[3], 16) ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
746 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
747
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
748 c = this.patterns.rgb.exec(s);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
749 if (c && c.length == 4) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
750 return [ parseInt(c[1], 10), parseInt(c[2], 10), parseInt(c[3], 10) ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
751 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
752
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
753 c = this.patterns.hex3.exec(s);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
754 if (c && c.length == 4) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
755 return [ parseInt(c[1] + c[1], 16), parseInt(c[2] + c[2], 16), parseInt(c[3] + c[3], 16) ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
756 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
757
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
758 return null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
759 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
760
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
761 proto.getAttribute = function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
762 var el = this.getEl();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
763 if (this.patterns.color.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
764 var val = YAHOO.util.Dom.getStyle(el, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
765
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
766 var that = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
767 if (this.patterns.transparent.test(val)) { // bgcolor default
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
768 var parent = YAHOO.util.Dom.getAncestorBy(el, function(node) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
769 return !that.patterns.transparent.test(val);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
770 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
771
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
772 if (parent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
773 val = Y.Dom.getStyle(parent, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
774 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
775 val = ColorAnim.DEFAULT_BGCOLOR;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
776 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
777 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
778 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
779 val = superclass.getAttribute.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
780 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
781
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
782 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
783 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
784
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
785 proto.doMethod = function(attr, start, end) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
786 var val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
787
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
788 if ( this.patterns.color.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
789 val = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
790 for (var i = 0, len = start.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
791 val[i] = superclass.doMethod.call(this, attr, start[i], end[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
792 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
793
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
794 val = 'rgb('+Math.floor(val[0])+','+Math.floor(val[1])+','+Math.floor(val[2])+')';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
795 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
796 else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
797 val = superclass.doMethod.call(this, attr, start, end);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
798 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
799
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
800 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
801 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
802
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
803 proto.setRuntimeAttribute = function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
804 superclass.setRuntimeAttribute.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
805
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
806 if ( this.patterns.color.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
807 var attributes = this.attributes;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
808 var start = this.parseColor(this.runtimeAttributes[attr].start);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
809 var end = this.parseColor(this.runtimeAttributes[attr].end);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
810 // fix colors if going "by"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
811 if ( typeof attributes[attr]['to'] === 'undefined' && typeof attributes[attr]['by'] !== 'undefined' ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
812 end = this.parseColor(attributes[attr].by);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
813
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
814 for (var i = 0, len = start.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
815 end[i] = start[i] + end[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
816 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
817 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
818
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
819 this.runtimeAttributes[attr].start = start;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
820 this.runtimeAttributes[attr].end = end;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
821 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
822 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
823
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
824 Y.ColorAnim = ColorAnim;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
825 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
826 /*!
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
827 TERMS OF USE - EASING EQUATIONS
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
828 Open source under the BSD License.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
829 Copyright 2001 Robert Penner All rights reserved.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
830
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
831 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
832
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
833 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
834 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
835 * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
836
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
837 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
838 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
839
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
840 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
841 * Singleton that determines how an animation proceeds from start to end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
842 * @class Easing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
843 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
844 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
845
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
846 YAHOO.util.Easing = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
847
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
848 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
849 * Uniform speed between points.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
850 * @method easeNone
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
851 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
852 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
853 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
854 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
855 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
856 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
857 easeNone: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
858 return c*t/d + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
859 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
860
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
861 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
862 * Begins slowly and accelerates towards end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
863 * @method easeIn
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
864 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
865 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
866 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
867 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
868 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
869 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
870 easeIn: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
871 return c*(t/=d)*t + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
872 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
873
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
874 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
875 * Begins quickly and decelerates towards end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
876 * @method easeOut
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
877 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
878 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
879 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
880 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
881 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
882 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
883 easeOut: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
884 return -c *(t/=d)*(t-2) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
885 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
886
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
887 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
888 * Begins slowly and decelerates towards end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
889 * @method easeBoth
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
890 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
891 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
892 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
893 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
894 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
895 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
896 easeBoth: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
897 if ((t/=d/2) < 1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
898 return c/2*t*t + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
899 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
900
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
901 return -c/2 * ((--t)*(t-2) - 1) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
902 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
903
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
904 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
905 * Begins slowly and accelerates towards end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
906 * @method easeInStrong
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
907 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
908 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
909 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
910 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
911 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
912 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
913 easeInStrong: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
914 return c*(t/=d)*t*t*t + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
915 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
916
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
917 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
918 * Begins quickly and decelerates towards end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
919 * @method easeOutStrong
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
920 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
921 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
922 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
923 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
924 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
925 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
926 easeOutStrong: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
927 return -c * ((t=t/d-1)*t*t*t - 1) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
928 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
929
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
930 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
931 * Begins slowly and decelerates towards end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
932 * @method easeBothStrong
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
933 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
934 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
935 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
936 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
937 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
938 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
939 easeBothStrong: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
940 if ((t/=d/2) < 1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
941 return c/2*t*t*t*t + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
942 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
943
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
944 return -c/2 * ((t-=2)*t*t*t - 2) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
945 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
946
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
947 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
948 * Snap in elastic effect.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
949 * @method elasticIn
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
950 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
951 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
952 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
953 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
954 * @param {Number} a Amplitude (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
955 * @param {Number} p Period (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
956 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
957 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
958
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
959 elasticIn: function (t, b, c, d, a, p) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
960 if (t == 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
961 return b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
962 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
963 if ( (t /= d) == 1 ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
964 return b+c;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
965 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
966 if (!p) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
967 p=d*.3;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
968 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
969
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
970 if (!a || a < Math.abs(c)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
971 a = c;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
972 var s = p/4;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
973 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
974 else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
975 var s = p/(2*Math.PI) * Math.asin (c/a);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
976 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
977
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
978 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
979 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
980
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
981 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
982 * Snap out elastic effect.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
983 * @method elasticOut
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
984 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
985 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
986 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
987 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
988 * @param {Number} a Amplitude (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
989 * @param {Number} p Period (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
990 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
991 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
992 elasticOut: function (t, b, c, d, a, p) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
993 if (t == 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
994 return b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
995 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
996 if ( (t /= d) == 1 ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
997 return b+c;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
998 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
999 if (!p) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1000 p=d*.3;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1001 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1002
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1003 if (!a || a < Math.abs(c)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1004 a = c;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1005 var s = p / 4;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1006 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1007 else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1008 var s = p/(2*Math.PI) * Math.asin (c/a);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1009 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1010
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1011 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1012 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1013
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1014 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1015 * Snap both elastic effect.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1016 * @method elasticBoth
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1017 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1018 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1019 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1020 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1021 * @param {Number} a Amplitude (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1022 * @param {Number} p Period (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1023 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1024 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1025 elasticBoth: function (t, b, c, d, a, p) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1026 if (t == 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1027 return b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1028 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1029
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1030 if ( (t /= d/2) == 2 ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1031 return b+c;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1032 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1033
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1034 if (!p) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1035 p = d*(.3*1.5);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1036 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1037
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1038 if ( !a || a < Math.abs(c) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1039 a = c;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1040 var s = p/4;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1041 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1042 else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1043 var s = p/(2*Math.PI) * Math.asin (c/a);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1044 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1045
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1046 if (t < 1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1047 return -.5*(a*Math.pow(2,10*(t-=1)) *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1048 Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1049 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1050 return a*Math.pow(2,-10*(t-=1)) *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1051 Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1052 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1053
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1054
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1055 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1056 * Backtracks slightly, then reverses direction and moves to end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1057 * @method backIn
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1058 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1059 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1060 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1061 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1062 * @param {Number} s Overshoot (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1063 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1064 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1065 backIn: function (t, b, c, d, s) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1066 if (typeof s == 'undefined') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1067 s = 1.70158;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1068 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1069 return c*(t/=d)*t*((s+1)*t - s) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1070 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1071
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1072 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1073 * Overshoots end, then reverses and comes back to end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1074 * @method backOut
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1075 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1076 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1077 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1078 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1079 * @param {Number} s Overshoot (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1080 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1081 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1082 backOut: function (t, b, c, d, s) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1083 if (typeof s == 'undefined') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1084 s = 1.70158;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1085 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1086 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1087 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1088
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1089 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1090 * Backtracks slightly, then reverses direction, overshoots end,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1091 * then reverses and comes back to end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1092 * @method backBoth
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1093 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1094 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1095 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1096 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1097 * @param {Number} s Overshoot (optional)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1098 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1099 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1100 backBoth: function (t, b, c, d, s) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1101 if (typeof s == 'undefined') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1102 s = 1.70158;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1103 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1104
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1105 if ((t /= d/2 ) < 1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1106 return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1107 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1108 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1109 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1110
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1111 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1112 * Bounce off of start.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1113 * @method bounceIn
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1114 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1115 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1116 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1117 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1118 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1119 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1120 bounceIn: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1121 return c - YAHOO.util.Easing.bounceOut(d-t, 0, c, d) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1122 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1123
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1124 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1125 * Bounces off end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1126 * @method bounceOut
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1127 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1128 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1129 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1130 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1131 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1132 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1133 bounceOut: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1134 if ((t/=d) < (1/2.75)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1135 return c*(7.5625*t*t) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1136 } else if (t < (2/2.75)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1137 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1138 } else if (t < (2.5/2.75)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1139 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1140 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1141 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1142 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1143
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1144 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1145 * Bounces off start and end.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1146 * @method bounceBoth
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1147 * @param {Number} t Time value used to compute current value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1148 * @param {Number} b Starting value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1149 * @param {Number} c Delta between start and end values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1150 * @param {Number} d Total length of animation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1151 * @return {Number} The computed value for the current animation frame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1152 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1153 bounceBoth: function (t, b, c, d) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1154 if (t < d/2) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1155 return YAHOO.util.Easing.bounceIn(t*2, 0, c, d) * .5 + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1156 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1157 return YAHOO.util.Easing.bounceOut(t*2-d, 0, c, d) * .5 + c*.5 + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1158 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1159 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1160
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1161 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1162 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1163 * Anim subclass for moving elements along a path defined by the "points"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1164 * member of "attributes". All "points" are arrays with x, y coordinates.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1165 * <p>Usage: <code>var myAnim = new YAHOO.util.Motion(el, { points: { to: [800, 800] } }, 1, YAHOO.util.Easing.easeOut);</code></p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1166 * @class Motion
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1167 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1168 * @requires YAHOO.util.Anim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1169 * @requires YAHOO.util.AnimMgr
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1170 * @requires YAHOO.util.Easing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1171 * @requires YAHOO.util.Bezier
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1172 * @requires YAHOO.util.Dom
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1173 * @requires YAHOO.util.Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1174 * @requires YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1175 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1176 * @extends YAHOO.util.ColorAnim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1177 * @param {String | HTMLElement} el Reference to the element that will be animated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1178 * @param {Object} attributes The attribute(s) to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1179 * Each attribute is an object with at minimum a "to" or "by" member defined.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1180 * Additional optional members are "from" (defaults to current value), "units" (defaults to "px").
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1181 * All attribute names use camelCase.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1182 * @param {Number} duration (optional, defaults to 1 second) Length of animation (frames or seconds), defaults to time-based
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1183 * @param {Function} method (optional, defaults to YAHOO.util.Easing.easeNone) Computes the values that are applied to the attributes per frame (generally a YAHOO.util.Easing method)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1184 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1185 var Motion = function(el, attributes, duration, method) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1186 if (el) { // dont break existing subclasses not using YAHOO.extend
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1187 Motion.superclass.constructor.call(this, el, attributes, duration, method);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1188 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1189 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1190
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1191
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1192 Motion.NAME = 'Motion';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1193
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1194 // shorthand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1195 var Y = YAHOO.util;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1196 YAHOO.extend(Motion, Y.ColorAnim);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1197
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1198 var superclass = Motion.superclass;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1199 var proto = Motion.prototype;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1200
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1201 proto.patterns.points = /^points$/i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1202
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1203 proto.setAttribute = function(attr, val, unit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1204 if ( this.patterns.points.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1205 unit = unit || 'px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1206 superclass.setAttribute.call(this, 'left', val[0], unit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1207 superclass.setAttribute.call(this, 'top', val[1], unit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1208 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1209 superclass.setAttribute.call(this, attr, val, unit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1210 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1211 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1212
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1213 proto.getAttribute = function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1214 if ( this.patterns.points.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1215 var val = [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1216 superclass.getAttribute.call(this, 'left'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1217 superclass.getAttribute.call(this, 'top')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1218 ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1219 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1220 val = superclass.getAttribute.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1221 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1222
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1223 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1224 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1225
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1226 proto.doMethod = function(attr, start, end) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1227 var val = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1228
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1229 if ( this.patterns.points.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1230 var t = this.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1231 val = Y.Bezier.getPosition(this.runtimeAttributes[attr], t);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1232 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1233 val = superclass.doMethod.call(this, attr, start, end);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1234 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1235 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1236 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1237
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1238 proto.setRuntimeAttribute = function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1239 if ( this.patterns.points.test(attr) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1240 var el = this.getEl();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1241 var attributes = this.attributes;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1242 var start;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1243 var control = attributes['points']['control'] || [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1244 var end;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1245 var i, len;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1246
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1247 if (control.length > 0 && !(control[0] instanceof Array) ) { // could be single point or array of points
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1248 control = [control];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1249 } else { // break reference to attributes.points.control
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1250 var tmp = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1251 for (i = 0, len = control.length; i< len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1252 tmp[i] = control[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1253 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1254 control = tmp;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1255 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1256
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1257 if (Y.Dom.getStyle(el, 'position') == 'static') { // default to relative
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1258 Y.Dom.setStyle(el, 'position', 'relative');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1259 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1260
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1261 if ( isset(attributes['points']['from']) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1262 Y.Dom.setXY(el, attributes['points']['from']); // set position to from point
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1263 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1264 else { Y.Dom.setXY( el, Y.Dom.getXY(el) ); } // set it to current position
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1265
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1266 start = this.getAttribute('points'); // get actual top & left
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1267
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1268 // TO beats BY, per SMIL 2.1 spec
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1269 if ( isset(attributes['points']['to']) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1270 end = translateValues.call(this, attributes['points']['to'], start);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1271
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1272 var pageXY = Y.Dom.getXY(this.getEl());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1273 for (i = 0, len = control.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1274 control[i] = translateValues.call(this, control[i], start);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1275 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1276
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1277
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1278 } else if ( isset(attributes['points']['by']) ) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1279 end = [ start[0] + attributes['points']['by'][0], start[1] + attributes['points']['by'][1] ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1280
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1281 for (i = 0, len = control.length; i < len; ++i) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1282 control[i] = [ start[0] + control[i][0], start[1] + control[i][1] ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1283 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1284 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1285
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1286 this.runtimeAttributes[attr] = [start];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1287
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1288 if (control.length > 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1289 this.runtimeAttributes[attr] = this.runtimeAttributes[attr].concat(control);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1290 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1291
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1292 this.runtimeAttributes[attr][this.runtimeAttributes[attr].length] = end;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1293 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1294 else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1295 superclass.setRuntimeAttribute.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1296 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1297 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1298
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1299 var translateValues = function(val, start) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1300 var pageXY = Y.Dom.getXY(this.getEl());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1301 val = [ val[0] - pageXY[0] + start[0], val[1] - pageXY[1] + start[1] ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1302
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1303 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1304 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1305
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1306 var isset = function(prop) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1307 return (typeof prop !== 'undefined');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1308 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1309
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1310 Y.Motion = Motion;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1311 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1312 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1313 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1314 * Anim subclass for scrolling elements to a position defined by the "scroll"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1315 * member of "attributes". All "scroll" members are arrays with x, y scroll positions.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1316 * <p>Usage: <code>var myAnim = new YAHOO.util.Scroll(el, { scroll: { to: [0, 800] } }, 1, YAHOO.util.Easing.easeOut);</code></p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1317 * @class Scroll
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1318 * @namespace YAHOO.util
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1319 * @requires YAHOO.util.Anim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1320 * @requires YAHOO.util.AnimMgr
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1321 * @requires YAHOO.util.Easing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1322 * @requires YAHOO.util.Bezier
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1323 * @requires YAHOO.util.Dom
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1324 * @requires YAHOO.util.Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1325 * @requires YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1326 * @extends YAHOO.util.ColorAnim
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1327 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1328 * @param {String or HTMLElement} el Reference to the element that will be animated
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1329 * @param {Object} attributes The attribute(s) to be animated.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1330 * Each attribute is an object with at minimum a "to" or "by" member defined.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1331 * Additional optional members are "from" (defaults to current value), "units" (defaults to "px").
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1332 * All attribute names use camelCase.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1333 * @param {Number} duration (optional, defaults to 1 second) Length of animation (frames or seconds), defaults to time-based
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1334 * @param {Function} method (optional, defaults to YAHOO.util.Easing.easeNone) Computes the values that are applied to the attributes per frame (generally a YAHOO.util.Easing method)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1335 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1336 var Scroll = function(el, attributes, duration, method) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1337 if (el) { // dont break existing subclasses not using YAHOO.extend
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1338 Scroll.superclass.constructor.call(this, el, attributes, duration, method);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1339 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1340 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1341
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1342 Scroll.NAME = 'Scroll';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1343
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1344 // shorthand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1345 var Y = YAHOO.util;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1346 YAHOO.extend(Scroll, Y.ColorAnim);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1347
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1348 var superclass = Scroll.superclass;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1349 var proto = Scroll.prototype;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1350
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1351 proto.doMethod = function(attr, start, end) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1352 var val = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1353
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1354 if (attr == 'scroll') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1355 val = [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1356 this.method(this.currentFrame, start[0], end[0] - start[0], this.totalFrames),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1357 this.method(this.currentFrame, start[1], end[1] - start[1], this.totalFrames)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1358 ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1359
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1360 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1361 val = superclass.doMethod.call(this, attr, start, end);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1362 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1363 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1364 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1365
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1366 proto.getAttribute = function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1367 var val = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1368 var el = this.getEl();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1369
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1370 if (attr == 'scroll') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1371 val = [ el.scrollLeft, el.scrollTop ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1372 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1373 val = superclass.getAttribute.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1374 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1375
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1376 return val;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1377 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1378
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1379 proto.setAttribute = function(attr, val, unit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1380 var el = this.getEl();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1381
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1382 if (attr == 'scroll') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1383 el.scrollLeft = val[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1384 el.scrollTop = val[1];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1385 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1386 superclass.setAttribute.call(this, attr, val, unit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1387 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1388 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1389
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1390 Y.Scroll = Scroll;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1391 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1392 YAHOO.register("animation", YAHOO.util.Anim, {version: "2.8.0r4", build: "2449"});