jQuery easing function-понимание переменных

Как работает функция смягчения для jQuery? Возьмем для примера:

easeInQuad = function (x, t, b, c, d) {
    return c*(t/=d)*t + b;
};

Как это работает? Что содержит каждый параметр? Как бы я реализовал какое-то тупое смягчение для анимации?

также, как бы я прикрепил шаблон ослабления к jQuery, загружает его в $.ослабление достаточно хорошо?

5 ответов


согласно источнику jQuery 1.6.2, значение функции смягчения выглядит следующим образом. Функция вызывается в различные моменты времени во время анимации. В мгновение ока она называется:

  • x и t оба говорят, какое время сейчас, относительно начала анимации. х выражается как число с плавающей точкой в диапазоне [0,1], где 0-начало и 1 конец. t выражается в миллисекундах с начала анимации.
  • d является продолжительность анимации, как указано в вызове animate, в миллисекундах.
  • b=0 и c=1.

функция ослабления должна возвращать число с плавающей запятой в диапазоне [0,1], назовите его r. jQuery затем вычисляет x=start+r*(end-start), где start и end являются начальным и конечным значениями свойства, как указано в вызове animate, и он устанавливает значение свойства x.

насколько я вижу, jQuery не дает вам прямого управления когда вызывается функция шага анимации, она позволяет только сказать: "если меня вызывают в момент t, то я должен быть до сих пор через всю анимацию. Поэтому вы не можете, например, просить, чтобы ваш объект перерисовывался чаще, когда он движется быстрее. Кроме того, я не знаю, почему другие люди говорят, что b-начальное значение, а c-изменение-это не то, что говорит исходный код jQuery.

если вы хотите определить свою собственную функцию смягчения, чтобы сделать то же самое, что easeInQuad, для пример,

$.extend(jQuery.easing,{myfunc:function(x,t,b,c,d) { return x*x; }})

$('#marker').animate({left:'800px'},'slow','myfunc');

конкретный пример,

предположим, что наше начальное значение 1000 и мы хотим достичь 400 на 3s:

var initialValue = 1000,
    destinationValue = 400,
    amountOfChange = destinationValue - initialValue, // = -600
    duration = 3,
    elapsed;

пойдем от 0С до 3С:

elapsed = 0
$.easing.easeInQuad(null, elapsed, initialValue, amountOfChange, duration)
//> 1000

elapsed = 1
$.easing.easeInQuad(null, elapsed, initialValue, amountOfChange, duration)
//> 933.3333333333334

elapsed = 2
$.easing.easeInQuad(null, elapsed, initialValue, amountOfChange, duration)
//> 733.3333333333334

elapsed = 3
$.easing.easeInQuad(null, elapsed, initialValue, amountOfChange, duration)
//> 400

так по сравнению с синопсисом:

$.easing.easeInQuad = function (x, t, b, c, d) {...}

мы можем сделать вывод:

 x       t          b              c            d
 |       |          |              |            |
null  elapsed  initialValue  amountOfChange  duration

NB1: одна важная вещь это elapsed(t) и duration(d) должен быть выражен в той же единице, например: здесь 'секунды' для нас, но может быть " ms " или что-то еще. Это также верно для initialValue(b) и amountOfChange(c), так подводя итог:

 x       t          b              c            d
 |       |          |              |            |
null  elapsed  initialValue  amountOfChange  duration
         ^          ^              ^            ^
         +----------|----=unit=----|------------+
                    +----=unit=----+

особое примечание 2: Как @DamonJW, я не знаю, почему x здесь. Он не появляется в Пеннер-х и кажется, не используется в результате: Пусть всегда устанавливает его в null


t: текущее время, b: начальное значение,c: изменение от начального значения до конечного значения, D: продолжительность.

вот как это работает:http://james.padolsey.com/demos/jquery/easing/ (кривая, представляющая при изменении свойства CSS).

вот как я бы реализовал некоторое тупое ослабление:http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm (математика не моя сильная сторона)

вы бы расширить, как любой из эти: http://code.google.com/p/vanitytools/source/browse/trunk/website/js/custom_easing.js?spec=svn29&r=29 - достаточно!


этот плагин реализует наиболее распространенные функции смягчения:http://gsgd.co.uk/sandbox/jquery/easing/


просмотрел код 1.11 jquery. Параметр x, по-видимому, означает "процент", независимо от начального значения времени. Итак, x всегда (0