Jquery UI反弹缓解功能使反弹减少和/或控制反弹次数

Jquery UI反弹缓解功能使反弹减少和/或控制反弹次数,jquery,function,user-interface,easing,bounce,Jquery,Function,User Interface,Easing,Bounce,我可以看到有很多人问这样的问题。但没有明确的答案。我还没有找到任何可行的解决方案,这可能是因为我问的问题比我想的要难得多 我在制作动画时使用了jQuery UI的弹跳放松效果,让一个对象落在屏幕上,然后我希望它只弹跳两次,就像它是一个沉重的对象,并且不是很有弹性一样。有人知道怎么做吗?这里是Bounce函数,因为它是在UI中固有的,关于哪些变量需要一起更改和协调,有什么想法吗?我试着自己去弄清楚,但我在这类函数和数学逻辑方面的能力还不够 本机反弹功能: Bounce: function ( p

我可以看到有很多人问这样的问题。但没有明确的答案。我还没有找到任何可行的解决方案,这可能是因为我问的问题比我想的要难得多

我在制作动画时使用了jQuery UI的弹跳放松效果,让一个对象落在屏幕上,然后我希望它只弹跳两次,就像它是一个沉重的对象,并且不是很有弹性一样。有人知道怎么做吗?这里是Bounce函数,因为它是在UI中固有的,关于哪些变量需要一起更改和协调,有什么想法吗?我试着自己去弄清楚,但我在这类函数和数学逻辑方面的能力还不够

本机反弹功能:

Bounce: function ( p ) {
        var pow2,
         bounce = 4;

     while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
    return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
},
在这两个函数中,我知道最基本形式的“p”是距离目标多远的百分比

有人有什么想法吗

我还发现:

如果你想添加一大堆额外的代码,我甚至已经想出了如何从中获得我想要的反弹,但是我宁愿做一个自定义的放松,让我能够实现我的目标。而不是用一大堆无关的代码重写上面的bounce函数


感谢所有有解决方案的人。

从您已经提供的源代码中可以看出,bounce ease函数只是一组
n
沿域0到1的不连续函数,其中n是您想要的反弹次数。您所需要做的就是设计这些函数,使它们的y=1截取都彼此接触,并操纵它们的最大值/顶点来模拟一个很好的衰减反弹

为此,您需要知道如何移动函数、如何翻转函数以及如何缩放/拉伸函数。请浏览此网页:

回想一下,我们可以写出多项式函数的分解形式,以便轻松地分配它们的根(y=0截距)。让我们用二次函数来保持简单。例如,函数的形式是:
f(x)=标量*(x-root1)(x-root2)+常量。因为我们希望反弹发生在y=1而不是y=0,所以我们在所有函数中添加一个常量值1。为了使反弹函数的y=1截距对齐,必须将一个函数最右边的y=1截距输入到下一个函数。假设我们想要四次反弹。我们的方程看起来像

f1(x)=a1(x+r0)(x-r1)+1 // Note: make r0 = r1 to center function's maxima at x=0
f2(x)=a2(x-r1)(x-r2)+1
f3(x)=a3(x-r2)(x-r3)+1
f4(x)=a4(x-r3)(x-1) +1 // r4 = 1 because bounce ends at x=1
一旦你建立了这个方程组,你只需要调整你的y=1截距(r0到r3)和标量(a1到a4)的位置就可以得到你想要的反弹间隔和振幅。下面是我在Apple utility Grapher中制作的一个示例。我强烈建议你将这些方程插入一个类似的绘图程序或计算器中,并使用这些值(如果你能找到一个更平滑的反弹系统,你可能想重新创建形状)

所以我想你的代码可能是这样的

bounce(x):
    x = clamp(x,0,1)
    if x >= 0 and x < r1 then
        return f1(x)
    elseif x >= r2 and x < r3 then
        return f2(x)
    ... 
    else
        return fn(x)
    end
反弹(x):
x=夹具(x,0,1)
如果x>=0且x=r2,那么x
其中f1,f2,…,fn是函数(但要尽可能多地相乘,合并常数等),r1,r2,…,rn是函数的y=1截距


注意:这是一个简化的解决方案,因为我们假设只需要二次平滑缓和。您可以使用高阶函数,例如四次函数,但现在我认为,如果您只需要为每个函数担心两个根,那么就更容易了。

从您已经提供的源代码中可以看出,bounce ease函数只是沿着域0到1的一组不连续函数,其中n是所需的反弹次数。您所需要做的就是设计这些函数,使它们的y=1截取都彼此接触,并操纵它们的最大值/顶点来模拟一个很好的衰减反弹

为此,您需要知道如何移动函数、如何翻转函数以及如何缩放/拉伸函数。请浏览此网页:

回想一下,我们可以写出多项式函数的分解形式,以便轻松地分配它们的根(y=0截距)。让我们用二次函数来保持简单。例如,函数的形式是:
f(x)=标量*(x-root1)(x-root2)+常量。因为我们希望反弹发生在y=1而不是y=0,所以我们在所有函数中添加一个常量值1。为了使反弹函数的y=1截距对齐,必须将一个函数最右边的y=1截距输入到下一个函数。假设我们想要四次反弹。我们的方程看起来像

f1(x)=a1(x+r0)(x-r1)+1 // Note: make r0 = r1 to center function's maxima at x=0
f2(x)=a2(x-r1)(x-r2)+1
f3(x)=a3(x-r2)(x-r3)+1
f4(x)=a4(x-r3)(x-1) +1 // r4 = 1 because bounce ends at x=1
一旦你建立了这个方程组,你只需要调整你的y=1截距(r0到r3)和标量(a1到a4)的位置就可以得到你想要的反弹间隔和振幅。下面是我在Apple utility Grapher中制作的一个示例。我强烈建议你将这些方程插入一个类似的绘图程序或计算器中,并使用这些值(如果你能找到一个更平滑的反弹系统,你可能想重新创建形状)

所以我想你的代码可能是这样的

bounce(x):
    x = clamp(x,0,1)
    if x >= 0 and x < r1 then
        return f1(x)
    elseif x >= r2 and x < r3 then
        return f2(x)
    ... 
    else
        return fn(x)
    end
反弹(x):
x=夹具(x,0,1)
如果x>=0且x=r2,那么x
其中f1,f2,…,fn是函数(但要尽可能多地相乘,合并常数等),r1,r2,…,rn是函数的y=1截距

注意:这是一个简化的解决方案,因为我们假设只需要二次平滑缓和。你可以使用更高的ord