jquery – 什么是缓动函数?

前端之家收集整理的这篇文章主要介绍了jquery – 什么是缓动函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是在动画的上下文中缓动函数。看来dojo,jquery,silverlight,flex等UI系统都有缓动函数的概念。我找不到一个很好的解释放宽功能?任何人都可以解释缓动函数的概念,或者指点一个很好的解释,我对这个概念感兴趣不是在一个框架的具体细节?

是缓和严格用于位置还是一般的,可以应用于对象的任何属性

解决方法

缓动函数通常是描述给定完整性百分比的属性的值的函数。不同的框架使用略有不同的变化,但是一旦你得到想法,这个概念很容易掌握,但最好看看几个例子。

首先让我们看看所有我们的缓动函数将遵守的接口。

我们的缓动函数需要几个参数:

> percentComplete:(0.0到1.0)。
> elaspedTime:动画已运行的毫秒数
> startValue:开始的值(或完成百分比为0%时的值)
> endValue:要结束的值(或完成百分比为100%时的值)
> totalDuration:所需的动画总长度(以毫秒为单位)

并将返回一个数字,该数字表示属性应设置为的值。

注意:这是jQuery使用它的缓动函数的相同签名,我将借用例子。

最容易理解的是一个线性的轻松:

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

现在要把这个使用:

让我们说,我们有一个动画将要去1000毫秒,应该从0开始,结束于50.将这些值传递到我们的缓动函数应该告诉我们实际的值应该是:

linear(0,50,1000)        // 0
linear(0.25,250,1000)  // 12.5
linear(0.5,500,1000)   // 25
linear(0.75,750,1000)  // 37.5
linear(1.0,1000,1000)  // 50

这是一个非常直接的(不是双关的)补间。它是一个简单的线性插值。如果你要绘制值对时间的图,它将是一条直线:

让我们来看看一个更复杂的缓动函数,一个quadradic轻松:

var easeInQuad = function (x,t,b,c,d) {
    return c*(t/=d)*t + b;
}

让我们看看相同的结果,使用与之前相同的输入:

easeInQuad(0,1000)      // 0
easeInQuad(0.25,1000) // 3.125
easeInQuad(0.5,1000)  // 12.5
easeInQuad(0.75,1000) // 28.125
easeInQuad(1,1000)   // 50

请注意,这些值与我们的线性宽度非常不同。它开始非常缓慢,然后加速到其结束点。在动画完成50%时,它仅达到12.5的值,这是我们指定的开始和结束值之间的实际距离的四分之一。

如果我们要绘制这个函数,它看起来像这样:

现在让我们来看看一个基本的简化:

var eaSEOutQuad = function (x,d) {
    return -c *(t/=d)*(t-2) + b;
};

这基本上是一个缓解的“相反”加速度曲线。它开始快,然后减速到它的结束值:

然后有一些功能可以放入和退出

var easeInOutQuad = function (x,d) {
    if ((t/=d/2) < 1) return c/2*t*t + b;
    return -c/2 * ((--t)*(t-2) - 1) + b;
};

功能将开始慢和结束慢,在中间达到其最大速度。

有一堆缓和/插值,你可以使用:线性,Quadradic,立方,Quart,Quint,Sine。还有特殊的缓和功能,如弹跳和弹性,有自己的。

例如,弹性方便:

var easeInElastic = function (x,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-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},

也许有人可以解释内插后面的实际数学部分,因为老实说,我不是一个数学wiz。但这是缓和函数本身的基本原理。

当您启动补间/动画时,动画引擎会记住所需的开始和结束值。然后每次更新时,它的数字都已经过了多少时间。它调用提供的缓动函数的值来找出属性应该设置的值。只要所有缓动函数实现相同的签名,它们可以轻松地交换出来,并且核心动画引擎不必知道差异。 (这使得关注的优秀分离)。

你会注意到,我已经避免明确地谈论x和y位置,因为宽松没有任何特定的位置本身。缓动函数只是定义了起始值和结束值之间的转换。这些可以是x坐标,或颜色,或对象的透明度。

事实上,在理论上,你可以应用不同的缓和函数来内插不同的属性。希望这有助于阐明一些基本的想法。

这里是一个真正的cool example(使用一个略有不同的签名,但是相同的原则)玩,以了解如何缓和与位置相关的想法。

编辑

这里是一个小jsFiddle我投在一起来演示一些基本的用法在javascript。请注意,top属性使用bounce补间,left属性使用quad补间。使用滑块模拟渲染循环。

因为缓动对象中的所有函数都有相同的签名,所以你可以互相交换任何它们。现在大多数这些东西都是硬编码的(像开始和结束值,使用的补间函数和动画的长度),但在动画助手的真实世界的例子,你会想传递在以下属性

>要更改的属性
>起始值(或如果未定义,则使用其当前值)
>结束值
>动画的长度
>对要使用的补间函数的引用。

动画引擎将在动画持续时间内跟踪这些设置,并且在每个更新周期期间,它将使用补间参数来计算属性新值。

原文链接:https://www.f2er.com/jquery/185088.html

猜你在找的jQuery相关文章