Помогите с пользовательской функцией JQuery ослабления - PullRequest
3 голосов
/ 30 августа 2011

Мне нужна довольно нетипичная функция ослабления jquery. По сути, это противоположно вашему традиционному замедлению easyInOut, потому что я хочу, чтобы процесс перешел от быстрого вступления к медленной средней части к быстрому выходу (вы можете назвать это speedInOut).

К сожалению, моя математика немного ржавая, и мне нужен кто-то, чтобы указать мне правильное направление с точки зрения того, как начать.

Кривая гиперболического синуса (sinh) идет несколько в правильном направлении к тому, что я ищу, но мне нужно, чтобы она была ограничена между 0 и 1 на обеих осях.

Вот скелет функции jquery замедления, с которым я работаю

$.easing.speedInOut = function(t, millisecondsSince, startValue, endValue, totalDuration) {
     if(t = 0) return startValue;
     if(t = 1) return startValue + endValue;
     // custom function should go here
};

Любая помощь будет принята с благодарностью!

1 Ответ

4 голосов
/ 31 августа 2011

Я разобрался с помощью моего ранее упомянутого блестящего коллеги (на самом деле именно он сделал всю тяжелую работу).

Последняя математическая формула, которую я в итоге использовал, была: (sinh ((x - 0,5) * 5) + sinh (- (x - 0,5)) + (sinh (2,5) + sin (-2,5))) / (sinh (2,5) * 1,82)

Мне также нужно былореализовать sinh в javascript, потому что он не является частью математического объекта, однако это довольно просто:

function sinh(aValue) {
var myTerm1 = Math.pow(Math.E, aValue);
var myTerm2 = Math.pow(Math.E, -aValue);
return (myTerm1-myTerm2)/2;
}

Сама функция замедления выглядит так:

$.easing.speedInOut = function(x, t, b, c, d) {
    return (sinh((x - 0.5) * 5) + sinh(-(x - 0.5)) + (sinh(2.5) + Math.sin(-2.5))) /    (sinh(2.5) * 1.82);
};
...