Easing

Это не easy

Теперь опять обратимся к easing – приведу пример произвольной функции, которой будет следовать анимация. Дабы особо не фантазировать, я взял пример из статьи на когда-то популярном Хабре oб анимации в MooTools фреймворке – наглядный пример с сердцебиением, которое описывается следующими функциями:

В расширении функционала easing нет ничего военного:

$.extend($.easing, {
    /**
     * Heart Beat
     *
     * @param {Float} x progress
     */
    heart:function(x) {
        if (x < 0.3) return Math.pow(x, 4) * 49.4;
        if (x < 0.4) return 9 * x - 2.3;
        if (x < 0.5) return -13 * x + 6.5;
        if (x < 0.6) return 4 * x - 2;
        if (x < 0.7) return 0.4;
        if (x < 0.75) return 4 * x - 2.4;
        if (x < 0.8) return -4 * x + 3.6;
        if (x >= 0.8) return 1 - Math.sin(Math.acos(x));
    }
});

Чуть-чуть пояснений, конструкция $.extend({}, {}) «смешивает» объекты:

Таким образом мы «вмешиваем» новый метод к существующему объекту $.easing; согласно коду, наш метод принимает в качестве параметра лишь одно значение:

x – коэффициент прохождения анимации, изменяется от 0 до 1, дробное

Результат, конечно, интересен, но его можно ещё чуть-чуть расширить дополнительными функциями (развернём и скомбинируем):

Получим следующие производные функции:

heartIn

heartOut

heartInOut

heartIn

heartOut

heartInOut

Работать с данным творением надо следующим образом:

Пример работы данной функции можно пощупать на соответствующей странице animate.easing.html:

Last updated