如何重新排列这些缓动函数以接受v0,v1和t?

时间:2015-12-07 23:27:33

标签: javascript function canvas transition easing

例如,这个要点中提供的缓动函数:https://gist.github.com/gre/1650294将是完美的,但我不知道如何修改它们以便它们采用v0,v1和t参数,就像我目前的lerp函数一样:

_lerp2: function(v0, v1, t) 
{
    return (1 - t) * v0 + t * v1;
}

这里提供的宽容也很好:http://gizma.com/easing/但在这种情况下,我不理解"价值的变化"参数。即使我这样做,我可能仍然希望这些函数只接受三个参数,v0,v1和t。

参数如下:v0 =起始值,v1 =结束值,t =介于0和1之间的值。例如,如果t = 0.5,则lerp返回例如v0和v1的平均值。对于这些其他缓动函数,我需要同样的行为。

或者如果修改这些缓动太难了,我能以某种方式修改现有的,工作的lerp函数,比如二次缓和吗?

1 个答案:

答案 0 :(得分:1)

从您提供的第一页修改缓动功能。

将以下参数添加到所有函数定义中。

例如

var linear = function (t) { 
    return t 
};

变为

var linear = function (t, start, end) { 
    return t 
};

其中start是时间t= 0的值,而endt = 1;的值

然后在每个函数中删除返回值并将其分配给t;

var linear = function (t, start, end) { 
    return t 
};

变为

var linear = function (t, start, end) { 
    t = t;
    // temp remove return
};

然后我们在Startend之间翻新t的新词。这是通过将startend之间的差异乘以t(仍然在0-1范围内)来缩放范围,然后添加{{1}来实现的。它将相对于start的新值移动。

start

实施例

var linear = function (t, start, end) { 
    t = t;
    t = (end - start) * t;
    t += start;
    return t;
};

// can be done in one line

var linear = function (t, start, end) { 
    return (end - start) * t + start;
};

// or
var easeOutQuart = function (t) {
    return 1-(--t)*t*t*t 
}

// becomes
var easeOutQuart = function (t, start, end) {
    return (end - start) * (1-(--t)*t*t*t) + start ;
}