3

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

任何帮助将不胜感激!

4

1 回答 1

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);
};
于 2011-08-31T09:03:15.857 回答