帮助自定义 jquery 缓动功能

Posted

技术标签:

【中文标题】帮助自定义 jquery 缓动功能【英文标题】:Help with custom jquery easing function 【发布时间】:2011-11-06 18:27:19 【问题描述】:

我需要一个相当非典型的 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
;

任何帮助将不胜感激!

【问题讨论】:

我的一位才华横溢的同事想出了这个:sinh((x - 0.5) * 10) + sinh(5)) / (sinh(5) * 2 see it rendered out on wolfram alpha 这已经很接近了到我想要的,它只是在中间部分放慢了一点 也许math.stackexchange.com 那边的人能帮到你? 我最终使用的最终数学公式是:(sinh((x - 0.5) * 5) + sinh(-(x - 0.5)) + (sinh(2.5) + sin(-2.5 ))) / (sinh(2.5) * 1.82) 我会尽快发布我自己问题的正确答案(从现在起 6 小时后,我不允许更早,因为我有不到 100 个代表) 【参考方案1】:

我在前面提到的才华横溢的同事(实际上是他完成了所有繁重的工作)的帮助下解决了问题。

我最终使用的最终数学公式是: (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);
;

【讨论】:

以上是关于帮助自定义 jquery 缓动功能的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Core Animation 创建自定义缓动功能?

有没有办法通过自定义缓动方程使用 UIView 动画

如何在自定义帮助器中重新实现 jQuery 的默认帮助器

适用于任何Html内容的jQuery Slider插件 - AnySlider

jQuery Summernote 自定义按钮功能

jQuery自定义插件--banner图滚动