transition-timer.js revision ca4ee40983d39fb8235d544a1049ba4ecc67964e
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley/**
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews* The Transition Utility provides an API for creating advanced transitions.
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews* @module node
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews*/
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley/**
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley* Provides the base Transition class, for animating numeric properties.
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews*
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews* @module node
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews* @submodule transition
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews*/
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews/**
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * A class for constructing animation instances.
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * @class Transition
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @for Transition
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * @constructor
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews */
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halleyvar PROPERTY_END = 'transition:propertyEnd',
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition = Y.Transition;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob HalleyY.mix(Transition.prototype, {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _start: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (Transition.useNative) {
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews this._runNative();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley } else {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley this._runTimer();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _runTimer: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var anim = this;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley anim._initAttrs();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition._running[Y.stamp(anim)] = anim;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley anim._startTime = new Date();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition._startTimer();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _end: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley delete Transition._running[Y.stamp(this)];
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley this._running = false;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley this._startTime = null;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _runFrame: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var t = new Date() - this._startTime;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley this._runAttrs(t);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _runAttrs: function(time) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var anim = this,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley node = anim._node,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley uid = Y.stamp(node),
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attrs = Transition._nodeAttrs[uid],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley customAttr = Transition.behaviors,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley done = false,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley allDone = false,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley callback = anim._callback,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley name,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley setter,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley elapsed,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley delay,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley d,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley t,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley i;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley for (name in attrs) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute = attrs[name];
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if ((attribute && attribute.transition === anim)) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley d = attribute.duration;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley delay = attribute.delay;
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson elapsed = time / 1000;
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson t = time;
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson setter = (i in customAttr && 'set' in customAttr[i]) ?
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson customAttr[i].set : Transition.DEFAULT_SETTER;
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson done = (t >= d);
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson if (t > d) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley t = d;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (!delay || time >= delay) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley setter(anim, name, attribute.from, attribute.to, t - delay, d - delay,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.easing, attribute.unit);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (done) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley delete attrs[name];
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley anim._count--;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (!allDone && anim._count <= 0) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley allDone = true;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley anim._end();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (callback) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley anim._callback = null;
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson setTimeout(function() { // IE: allow previous update to finish
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley callback.call(node, {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley elapsedTime: (time - delay) / 1000
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley });
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }, 1);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
9b6a170d22d61026d31bde87523f3320628b6ebcBrian Wellington
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson _initAttrs: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var anim = this,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley customAttr = Transition.behaviors,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley uid = Y.stamp(this._node),
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attrs = Transition._nodeAttrs[uid],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley duration,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley delay,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley easing,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley val,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley name,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley unit, begin, end;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley for (name in attrs) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute = attrs[name];
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (attrs.hasOwnProperty(name) && (attribute && attribute.transition === anim)) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley duration = attribute.duration * 1000;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley delay = attribute.delay * 1000;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley easing = attribute.easing;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley val = attribute.value;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley begin = (name in customAttr && 'get' in customAttr[name]) ?
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley customAttr[name].get(anim, name) : Transition.DEFAULT_GETTER(anim, name);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var mFrom = Transition.RE_UNITS.exec(begin);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var mTo = Transition.RE_UNITS.exec(val);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley begin = mFrom ? mFrom[1] : begin;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley end = mTo ? mTo[1] : val;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley unit = mTo ? mTo[2] : mFrom ? mFrom[2] : ''; // one might be zero TODO: mixed units
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (!unit && Transition.RE_DEFAULT_UNIT.test(name)) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley unit = Transition.DEFAULT_UNIT;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (!begin || !end) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Y.log('invalid "from" or "to" for "' + name + '"', 'error', 'transition');
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley return;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (typeof easing === 'string') {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (easing.indexOf('cubic-bezier') > -1) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley easing = easing.substring(13, easing.length - 1).split(',');
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley } else if (Transition.easings[easing]) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley easing = Transition.easings[easing];
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.from = begin;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.to = end;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.unit = unit;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.easing = easing;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.duration = duration;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley attribute.delay = delay;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley destroy: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley this.detachAll();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley this._node = null;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley}, true);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob HalleyY.mix(Y.Transition, {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _runtimeAttrs: {},
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley /**
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * Regex of properties that should use the default unit.
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley *
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @property RE_DEFAULT_UNIT
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @static
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley */
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley RE_DEFAULT_UNIT: /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley /**
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * The default unit to use with properties that pass the RE_DEFAULT_UNIT test.
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley *
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @property DEFAULT_UNIT
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @static
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley */
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley DEFAULT_UNIT: 'px',
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley /**
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * Time in milliseconds passed to setInterval for frame processing
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley *
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @property intervalTime
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @default 20
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * @static
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson */
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson intervalTime: 20,
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson /**
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * Bucket for custom getters and setters
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson *
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * @property behaviors
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * @static
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson */
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson behaviors: {
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson left: {
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson get: function(anim, attr) {
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson return Y.DOM._getAttrOffset(anim._node._node, attr);
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson }
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson }
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson },
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson /**
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * The default setter to use when setting object properties.
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson *
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * @property DEFAULT_SETTER
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson * @static
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson */
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson DEFAULT_SETTER: function(anim, att, from, to, elapsed, duration, fn, unit) {
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson from = Number(from);
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson to = Number(to);
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson var node = anim._node,
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson val = Transition.cubicBezier(fn, elapsed / duration);
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson val = from + val[0] * (to - from);
33682c92e96b39c395cdb2c3feb8eb5914e7d5a8Andreas Gustafsson
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (att in node._node.style || att in Y.DOM.CUSTOM_STYLES) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley unit = unit || '';
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley node.setStyle(att, val + unit);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley } else if (node._node.attributes[att]) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley node.setAttribute(att, val);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley } else {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley node.set(att, val);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley /**
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * The default getter to use when getting object properties.
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley *
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @property DEFAULT_GETTER
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @static
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley */
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley DEFAULT_GETTER: function(anim, att) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var node = anim._node,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley val = '';
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (att in node._node.style || att in Y.DOM.CUSTOM_STYLES) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley val = node.getComputedStyle(att);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley } else if (node._node.attributes[att]) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley val = node.getAttribute(att);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley } else {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley val = node.get(att);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley return val;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _startTimer: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (!Transition._timer) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition._timer = setInterval(Transition._runFrame, Transition.intervalTime);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _stopTimer: function() {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley clearInterval(Transition._timer);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition._timer = null;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley /**
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * Called per Interval to handle each animation frame.
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley * @method _runFrame
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson * @private
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson * @static
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson */
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson _runFrame: function() {
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson var done = true,
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson anim;
841179549b6433e782c164a562eb3422f603533dAndreas Gustafsson for (anim in Transition._running) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (Transition._running[anim]._runFrame) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley done = false;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition._running[anim]._runFrame();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley if (done) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley Transition._stopTimer();
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley }
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley cubicBezier: function(p, t) {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley var x0 = 0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley y0 = 0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley x1 = p[0],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley y1 = p[1],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley x2 = p[2],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley y2 = p[3],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley x3 = 1,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley y3 = 0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley A = x3 - 3 * x2 + 3 * x1 - x0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley B = 3 * x2 - 6 * x1 + 3 * x0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley C = 3 * x1 - 3 * x0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley D = x0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley E = y3 - 3 * y2 + 3 * y1 - y0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley F = 3 * y2 - 6 * y1 + 3 * y0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley G = 3 * y1 - 3 * y0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley H = y0,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley x = (((A*t) + B)*t + C)*t + D,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley y = (((E*t) + F)*t + G)*t + H;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley return [x, y];
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley easings: {
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley ease: [0.25, 0, 1, 0.25],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley linear: [0, 0, 1, 1],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley 'ease-in': [0.42, 0, 1, 1],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley 'ease-out': [0, 0, 0.58, 1],
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley 'ease-in-out': [0.42, 0, 0.58, 1]
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley },
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _running: {},
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley _timer: null,
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley RE_UNITS: /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley}, true);
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob HalleyTransition.behaviors.top = Transition.behaviors.bottom = Transition.behaviors.right = Transition.behaviors.left;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob HalleyY.Transition = Transition;
4610465ed9408cbe434dbfb8be8ea53f48969c91Bob Halley