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