/**
* Документация к jTweener и его фасаду
* @author Sergey Chikuyonok (sc@design.ru)
* @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
*/
/**
* Класс для пакетной анимации кучи объектов и их свойств.
* В большинстве случаев для создания анимации нужно всего лишь
* вызвать метод jTweener.addTween()
*/
var jTweener = {
/**
* Добавить анимацию для объекта obj, в котором нужно анимировать
* свойства options. Анимируемые свойства должны быть числами,
* но могут быть и строками, в которых указывается относительное
* изменение параметра. Например, передав свойство {left: '+=200'}
* мы попросим jTweener изменить свойство left на 200 единиц относительно
* начального значения этого свойства. Принимаются значения '+' и '-'.
* Есть ряд предопределенных параметров в переменной options:
* time: Number — продолжительность анимации, секунд. По умолчанию: 1
* transition: String, Function — алгоритм анимации
* (см. jTweener.easingFunctions). По умолчанию: 'easeoutexpo'
* delay: Number — задержка перед началом анимации, секунд. По умолчанию: 0
* onStart: Function — функция, которую нужно выполнить во время
* начала анимации
* onStartParams: Array — параметры для функции onStart
* onUpdate: Function — функция, выполняемая с каждым проходом
* анимации
* onUpdateParams: Array — параметры для функции onUpdate
* onComplete: Function — функция, которую нужно выполнить после
* окончания анимации
* onCompleteParams: Array — параметры для функции onComplete
* namespace: String — пространство имен, в котором должна отрабатываться
* анимация. Пространство имен подразумевает, что какие-то анимации
* (с одинаковым пространствои имен) работают как единый процесс,
* который можно в любой момент остановить либо вызвать после его завершения
* какую-то функцию. См. jTweener.addNSAction
* Важно помнить, что в этом фреймворке используется следующее соглашение:
* если анимируемое свойство является функцией, то оно используется как
* getter/setter. Если в эту функцию не передается никакое значение,
* значит, она используется как getter, если передается — используется
* как setter.
* @type {Function}
* @param {Object, Array} obj Объект или массив объектов, свойства
* которых нужно анимировать.
* @param {Object} options Параметры анимации
*/
addTween: function(obj, options) {},
/**
* Вспомогательная функция для создания анимаций, где требуется менять
* значение свойства в диапазоне от 0 до 1 (по сути, менять значение
* в процентном, а не в абсолютном выражении). Отличается от
* jTweener.addTween тем, что не требует наличия
* анимируемых объектов: можно предавать только параметры анимации,
* предполагая, что все анимируемые свойства будут записаны
* в setter нотации (то есть будут функциями, в которую будет
* приходить значение от 0 до 1; функция не используется как
* getter). Если все же передали объекты анимаций, то
* setter-функции будут выполняться в контексте этих объектов
* (то есть this внутри этих функций будет указывать на
* анимируемый объект). Важно помнить, что сколько анимируемых объектов
* было передано, столько раз будет вызываться setter-функция.
*
* Варианты использования:
* jTweener.addPercent(options : Object)
* jTweener.addPercent(anim_obj : Array|Object, options : Object)
* @example
* jTweener.addPecent({
* anim_param: function(value) {
* // значение value от 0 до 1
* var angle = Math.PI * 2;
* some_object.style.left = Math.sin(angle * value) + 'px';
* some_object.style.top = Math.cos(angle * value) + 'px';
* },
* time: 0.5,
* transition: 'easeinoutcubic'
* });
* @param {Object} options Параметры анимации
* @see jTweener#addTween
* @return {Object} Внутренний объект, созданный при добавлении анимации. Его можно использовать в jTweener.removeTween()
*/
addPercent: function(options){},
/**
* Добавляет функции, которые нужно выполнить при завершении
* шага анимации конкретного нэймспэйса. Принимаются следующие свойства
* аргумента actions: onUpdate, onUpdateParams,
* onComplete, onCompleteParams.
* Описания этих свойств такие же, как и в jTweener.addTween.
* @param {Object} actions Действия
* @param {String} [ns] Нэймспэйс, которому нужно добавить действия
* (по умолчанию: 'default')
*/
addNSAction: function(actions, ns){},
/**
* Удалить действия у нэймспэйса
* Варианты использования:
* removeNSActions() — удалит все действия из всех
* нэймспэйсов
* removeNSActions(namespace : String) — удалит все действия
* из нэймспэйса 'namespace'
* removeNSActions(namespace : String, action1 : String,
* action2 : String, ..., actionN : String) — удалит действия
* action1—N из нэймспэйса 'namespace'
*/
removeNSActions: function(){},
/**
* Удаляет анимации
* Варианты использования:
* removeTween() — удаляет абсолютно все анимации
* removeTween(namespace : String) — удаляет все анимации
* у нэймспэйса 'namespace'
* removeTween(namespace : String, obj : Object, Array) —
* удаляет анимации у объекта (или массива объектов) 'obj' из нэймспэйса
* 'namespace'
* removeTween(obj : Object, Array) — удаляет все анимации
* у объекта (или массива объектов) 'obj'
*/
removeTween: function(){}
};
/**
* Утилиты для анимаций
*/
jTweener.Utils = {
/**
* @param {Number} t Время
* @param {Number} p0 Начальная точка
* @param {Number} p1 Контрольная точка
* @param {Number} p2 Конечная точка
* @return {Number}
*/
bezier2: function(t, p0, p1, p2) {},
/**
* @param {Number} t Время
* @param {Number} p0 Начальная точка
* @param {Number} p1 Контрольная точка 1
* @param {Number} p2 Контрольная точка 2
* @param {Number} p3 Конечная точка
* @return {Number}
*/
bezier3: function(t, p0, p1, p2, p3) {},
/**
* Объединяет несколько объектов-хэшей в один
* @param {Object} ... Объекты, которые нужно объединить
* @return {Object}
*/
mergeObjects: function(){},
/**
* Разбирает строку и возвращает объект, содержащий цветовые компоненты.
* Понимает следующие форматы:
* rgb(120,50,255)
* rgb(88%,100%,39%)
* #a0b1c2
* #fff
* Если строка не может быть разобрана — возвращается черный цвет
* @author Blair Mitchelmore (http://jquery.offput.ca/highlightFade/)
* @param {String} color Строка с цветом.
* @return jTweener.Util.Color
*/
getRGB: function(color) {}
};
/**
* @class
* Вспомогательный класс для работы с цветом
* @param {Number} r Красная компонента (0—255)
* @param {Number} g Зеленая компонента (0—255)
* @param {Number} b Синяя компонента (0—255)
*/
jTweener.Utils.Color = function(r, g, b){};
/**
* Смешивает два цвета в указанной пропорции.
* @param {jTweener.Utils.Color} color1 Первичный цвет
* @param {jTweener.Utils.Color} color2 Вторичный цвет
* @param {Number} ratio Пропорция, в которой нужно смешать цвет (0 — чистый первичный цвет, 1 — чистый вторичный цвет).
* @return {jTweener.Utils.Color}
*/
jTweener.Utils.Color.blend = function(color1, color2, ratio){};
jTweener.Utils.Color.prototype = {
/** Красная компонента цвета */
r: 0,
/** Зеленая компонента цвета */
g: 0,
/** Синяя компонента цвета */
b: 0,
/**
* Возвращает цвет в формате RGB, например, 'rgb(129,250,0)'
* @return {String}
*/
toString: function(){}
}
/**
* Создает вспомогательный объект для создания анимаций через
* jTweener. Этот объет удобен тем, что хранит в себе
* ссылки на анимируемые объекты, что сокращает объем кода, необходимый
* для работы с jTweener. В том числе удобен тем, что
* позволяет хранить и передавть несколько хэшей с параметрами анимаций,
* что позволяет, например, создать хэш со стандартными параметрами, которые
* будут применяться при анимации разных объектов.
* @param {Element|Object|Array|jQuery} Объект или набор объектов, которые нужно анимировать
* @param {Object|Array} [options] Хэш (или массив хэшей) опций, которые будут применяться ко всем анимациям по умолчанию. Можно указать несколько аргументов с опициями
* @return {$tObj}
*
* @example
* var common_params = {
* time: 1,
* transition: 'easeoutcubic'
* };
*
* var my_tween = $t(document.getElementById('sample'), common_params).tween({left: 100});
* my_tween.stop();
*/
function $t(obj, options){return new $tObj();}
/**
* Вспомогательный элемент, используется только для code assist.
* Такого объекта в jTweener не существует в принципе
* @private
*/
function $tObj(){};
$tObj.prototype = {
/**
* Запуск анимации. Принимает неограниченное количество аргументов,
* каждый из которых является набором параметров анимаций. Все эти опции
* (включая те, которые были указаны при создании объекта) объединяются
* в один набор в том порядке, в котором они были указаны.
* @param {Object} [options] Один или несколько наборов параметров анимации
* @return {$t}
* @example
* var common_params = {
* time: 0.4,
* transition: 'linear'
* };
* $t(anim_obj).tween({left: 100, top: 10}, common_params);
*/
tween: function(options){},
/**
* Создает особый вид анимации — процентную (см. jTweener.addPercent).
* От обычной она отличется тем, что все анимируемые свойства должны быть
* функциями, принимающими один аргумент. Значение этого аргумента
* изменяется от 0 до 1. Для удобства вместо хэшей с параметрами можно
* отдавать функции
* @param {Object|Function} options Функция или набор функций в виде хэша
* @return {$t}
* @example
* var default_options = {
* time: 2,
* value: function(v){
* console.log(v);
* }
* };
* var obj = document.getElementById('test_obj');
* $t(obj).percent(default_options, function(v){
* console.log('same value is' + v);
* });
*/
percent: function(options){},
/**
* Останавливает анимацию на всех объектах текущей выборки
* @return {$t}
*/
stop: function(){},
/**
* Добавляет параметры анимации к тем параметрам, которые будут
* применятся по умолчанию при запуске любой анимации
* @param {Object} options Один или несколько хэшей с опциями
* @return {$t}
* @example
* $t(document.getElementById('example')).addOptions({time: 4});
*/
addOptions: function(options){},
/**
* Удаляет все параметры анимации, которые были установлены по умолчанию
* @return {$t}
* @example
* var my_tween = $t(document.getElementById('example'), {transition: 'linear'}).addOptions({time: 4});
* // у my_tween установлены параметры time и transition
*
* my_tween.clearOptions();
* // теперь у my_tween нет никаких параметров
*/
clearOptions: function(){},
/**
* Удаляет указанные параметры из параметров анимации по умолчанию.
* Принимает неограниченное количество строковых параметров.
* @param {String} option Одно или несколько названий параметров, которые нужно удалить
* @return {$t}
*
* @example
* var my_tween = $t(document.getElementById('example'), {transition: 'linear', left: 100}).addOptions({time: 4});
* // у my_tween установлены параметры time, transition и left
*
* my_tween.removeTween('time', 'left');
* // у my_tween осталось только свойство transition
*/
removeOptions: function(option){}
};