帮助自定义jquery缓动功能

时间:2011-08-30 12:24:00

标签: jquery animation jquery-animate jquery-easing easing-functions

我需要一个非常典型的jquery缓动函数。它基本上与传统的easeInOut缓动相反,因为我希望这个过程从快速介绍到较慢的中间部分再到快速的outro(你可以称之为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 个答案:

答案 0 :(得分:4)

我在前面提到的,聪明的同事的帮助下想出了事情(实际上是他做了所有繁重的工作)。

我最终使用的最终数学公式是: (sinh((x - 0.5)* 5)+ sinh( - (x - 0.5))+(sinh(2.5)+ sin(-2.5)))/(sinh(2.5)* 1.82)

我还需要在javascript中实现sinh,因为它不是数学对象的一部分,但这很容易:

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);
};