Облегчение функции в JavaScript - установите значение в 0
// t: current time, b: beginning value, c: change in value, d: duration
function easeInQuad(t, b, c, d) {
return c*(t/=d)*t + b;
}
function easeOutElastic(t, b, c, d) {
var s = 1.70158;
var p = 0;
var a = c;
if (t == 0) return b;
if ((t /= d) == 1) return b + c;
if (!p) p = d * .3;
if (a < Math.abs(c)) {
a = c;
var s = p / 4;
} else var s = p / (2 * Math.PI) * Math.asin(c / a);
return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
}
easeInQuad(100, 20, 0, 1000) // 20
easeInQuad(500, 20, 0, 1000) // 20
easeOutElastic(0, 20, 0, 1000) // 20
easeOutElastic(500, 20, 0, 1000) // NaN
easeOutElastic(1000, 20, 0, 1000) // 20
если изменение в значении равно 0, easeInQuad
всегда возвращают 20, easeOutElastic
также возвращает неправильное значение.
изменение значения не может быть 0? Как справиться с jQuery animate({top: 0})
установите 0 на 0,0001?
Я неправильно понимаю, что означает изменение значения. если я хочу, чтобы конечное значение было 0
параметр c
должно быть -20
1 ответ
Решение
Для следующего исполнения easeInQuad
easeInQuad(100, 20, 0, 1000)
Я получаю 20 из-за умножения 0 на большую часть вашей формулы.
0*(100/=1000)*100 + 20 = 20
Посмотрев на другие формулы смягчения, я думаю, что это ожидаемое поведение. Смотрите источник jQuery здесь
Дальнейшие тесты показывают, что изменение 0 на 1 должно давать 20.01, и эта тенденция продолжается. Опять же я думаю, что это ожидаемое поведение.